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,17 @@
1
+ /**
2
+ * SAGE public barrel — Story Archetype Generation Engine.
3
+ */
4
+ export * from "./taxonomy";
5
+ export * from "./prng";
6
+ export * from "./engine";
7
+ export * from "./empty-space";
8
+ export * from "./repetition";
9
+ export * from "./judge";
10
+ export * from "./worked-sketches";
11
+ export * from "./saga-os";
12
+ export * from "./saga-os-v2";
13
+ export * from "./saga-os-v4";
14
+ export * from "./saga-os-v5";
15
+ export * from "./saga-os-v6";
16
+ export * from "./saga-os-v7";
17
+ export * from "./saga-os-v8";
@@ -0,0 +1,246 @@
1
+ /**
2
+ * SAGE Manuscript Judge — publisher-style editorial grading.
3
+ * ---------------------------------------------------------------------------
4
+ * Two independent evidence lanes, combined honestly (never self-declared as
5
+ * "verified" from LLM output alone):
6
+ *
7
+ * 1. COMPUTED metrics — real, deterministic, local JS execution. No LLM call.
8
+ * Flesch Reading Ease (syllable-heuristic), sentence/paragraph length and
9
+ * variance, dialogue ratio, type-token (distinct-word) ratio as a
10
+ * repetition proxy, repeated-phrase density.
11
+ * 2. LLM RUBRIC — one model call asking for structured scores across the
12
+ * categories a human developmental editor / acquisitions reader would
13
+ * use, plus fractal rewrite targets (chapter -> scene -> sentence).
14
+ *
15
+ * The LLM lane is clearly labeled as a model judgment, not a verified fact.
16
+ * If JSON parsing fails, the raw text is preserved and `parseError` is set
17
+ * rather than fabricating a score.
18
+ */
19
+ import type { SageBlueprint } from "./engine";
20
+
21
+ export type ProseMetrics = {
22
+ wordCount: number;
23
+ sentenceCount: number;
24
+ paragraphCount: number;
25
+ avgSentenceLenWords: number;
26
+ sentenceLenStdev: number;
27
+ avgParagraphLenSentences: number;
28
+ paragraphLenStdev: number;
29
+ dialogueRatio: number;
30
+ distinctWordRatio: number;
31
+ fleschReadingEase: number;
32
+ fleschLabel: string;
33
+ repeatedPhraseDensity: number;
34
+ };
35
+
36
+ export type RewriteTarget = {
37
+ scope: "chapter" | "scene" | "paragraph" | "sentence";
38
+ location: string;
39
+ issue: string;
40
+ suggestion: string;
41
+ };
42
+
43
+ export type JudgeRubricScores = {
44
+ plotStructure: number;
45
+ characterization: number;
46
+ proseStyle: number;
47
+ dialogue: number;
48
+ pacing: number;
49
+ emotionalResonance: number;
50
+ thematicDepth: number;
51
+ realWorldRelation: number;
52
+ originality: number;
53
+ readabilityJudgment: number;
54
+ marketability: number;
55
+ overall: number;
56
+ };
57
+
58
+ export type ManuscriptGradeReport = {
59
+ metrics: ProseMetrics;
60
+ rubric: JudgeRubricScores | null;
61
+ justifications: Partial<Record<keyof JudgeRubricScores, string>> | null;
62
+ rewriteTargets: RewriteTarget[];
63
+ rawJudgeText: string;
64
+ parseError: string | null;
65
+ };
66
+
67
+ function splitSentences(text: string): string[] {
68
+ return text.replace(/\s+/g, " ").split(/(?<=[.!?])\s+/).map((s) => s.trim()).filter(Boolean);
69
+ }
70
+ function splitParagraphs(text: string): string[] {
71
+ return text.split(/\n{2,}/).map((p) => p.trim()).filter(Boolean);
72
+ }
73
+ function stdev(values: number[]): number {
74
+ if (values.length < 2) return 0;
75
+ const mean = values.reduce((a, b) => a + b, 0) / values.length;
76
+ const variance = values.reduce((a, b) => a + (b - mean) ** 2, 0) / values.length;
77
+ return Math.sqrt(variance);
78
+ }
79
+ function estimateSyllables(word: string): number {
80
+ const w = word.toLowerCase().replace(/[^a-z]/g, "");
81
+ if (!w) return 0;
82
+ const matches = w.match(/[aeiouy]+/g);
83
+ let count = matches ? matches.length : 1;
84
+ if (w.endsWith("e") && count > 1) count -= 1;
85
+ return Math.max(1, count);
86
+ }
87
+ function fleschLabel(score: number): string {
88
+ if (score >= 90) return "Very easy (5th grade)";
89
+ if (score >= 80) return "Easy (6th grade)";
90
+ if (score >= 70) return "Fairly easy (7th grade)";
91
+ if (score >= 60) return "Standard (8th–9th grade)";
92
+ if (score >= 50) return "Fairly difficult (10th–12th grade)";
93
+ if (score >= 30) return "Difficult (college)";
94
+ return "Very difficult (graduate)";
95
+ }
96
+
97
+ /** Real, locally-computed prose metrics — no model call. */
98
+ export function computeProseMetrics(text: string): ProseMetrics {
99
+ const body = text.replace(/^#{1,6}\s.*$/gm, "").trim();
100
+ const sentences = splitSentences(body);
101
+ const paragraphs = splitParagraphs(body);
102
+ const words = (body.match(/[A-Za-z']+/g) || []);
103
+ const wordCount = words.length;
104
+
105
+ const sentenceLens = sentences.map((s) => (s.match(/[A-Za-z']+/g) || []).length).filter((n) => n > 0);
106
+ const paraSentenceCounts = paragraphs.map((p) => splitSentences(p).length).filter((n) => n > 0);
107
+
108
+ const dialogueLines = sentences.filter((s) => /["“”]/.test(s)).length;
109
+ const dialogueRatio = sentences.length ? dialogueLines / sentences.length : 0;
110
+
111
+ const lowerWords = words.map((w) => w.toLowerCase());
112
+ const distinct = new Set(lowerWords).size;
113
+ const distinctWordRatio = lowerWords.length ? distinct / lowerWords.length : 0;
114
+
115
+ const syllables = words.reduce((a, w) => a + estimateSyllables(w), 0);
116
+ const fre = sentences.length && wordCount
117
+ ? 206.835 - 1.015 * (wordCount / sentences.length) - 84.6 * (syllables / wordCount)
118
+ : 0;
119
+ const fleschScore = Math.max(0, Math.min(100, Math.round(fre * 10) / 10));
120
+
121
+ // Repeated-phrase density: fraction of 5-gram shingles that are duplicates.
122
+ const shingle = lowerWords;
123
+ const grams = new Map<string, number>();
124
+ let total = 0;
125
+ for (let i = 0; i + 5 <= shingle.length; i += 1) {
126
+ const g = shingle.slice(i, i + 5).join(" ");
127
+ grams.set(g, (grams.get(g) ?? 0) + 1);
128
+ total += 1;
129
+ }
130
+ const dupGrams = Array.from(grams.values()).filter((n) => n > 1).reduce((a, n) => a + (n - 1), 0);
131
+ const repeatedPhraseDensity = total > 0 ? dupGrams / total : 0;
132
+
133
+ return {
134
+ wordCount,
135
+ sentenceCount: sentences.length,
136
+ paragraphCount: paragraphs.length,
137
+ avgSentenceLenWords: sentenceLens.length ? Math.round((sentenceLens.reduce((a, b) => a + b, 0) / sentenceLens.length) * 10) / 10 : 0,
138
+ sentenceLenStdev: Math.round(stdev(sentenceLens) * 10) / 10,
139
+ avgParagraphLenSentences: paraSentenceCounts.length ? Math.round((paraSentenceCounts.reduce((a, b) => a + b, 0) / paraSentenceCounts.length) * 10) / 10 : 0,
140
+ paragraphLenStdev: Math.round(stdev(paraSentenceCounts) * 10) / 10,
141
+ dialogueRatio: Math.round(dialogueRatio * 1000) / 1000,
142
+ distinctWordRatio: Math.round(distinctWordRatio * 1000) / 1000,
143
+ fleschReadingEase: fleschScore,
144
+ fleschLabel: fleschLabel(fleschScore),
145
+ repeatedPhraseDensity: Math.round(repeatedPhraseDensity * 1000) / 1000,
146
+ };
147
+ }
148
+
149
+ const RUBRIC_KEYS: (keyof JudgeRubricScores)[] = [
150
+ "plotStructure", "characterization", "proseStyle", "dialogue", "pacing",
151
+ "emotionalResonance", "thematicDepth", "realWorldRelation", "originality",
152
+ "readabilityJudgment", "marketability", "overall",
153
+ ];
154
+
155
+ export function buildJudgePrompt(fullText: string, blueprint: SageBlueprint, metrics: ProseMetrics): string {
156
+ return [
157
+ "You are a senior acquisitions editor and developmental editor at a major trade publisher.",
158
+ "Grade the manuscript below exactly as a human professional reader would for an acquisitions or revision memo.",
159
+ "Score each category 1-10 (10 = publication-ready at a major house). Be a real critic: do not default to 7-8 for everything.",
160
+ "",
161
+ "COMPUTED PROSE METRICS (already measured by software, for your reference — do not re-derive):",
162
+ `- Words: ${metrics.wordCount}, Sentences: ${metrics.sentenceCount}, Paragraphs: ${metrics.paragraphCount}`,
163
+ `- Avg sentence length: ${metrics.avgSentenceLenWords} words (stdev ${metrics.sentenceLenStdev})`,
164
+ `- Avg paragraph length: ${metrics.avgParagraphLenSentences} sentences (stdev ${metrics.paragraphLenStdev})`,
165
+ `- Dialogue ratio: ${(metrics.dialogueRatio * 100).toFixed(1)}%`,
166
+ `- Distinct-word ratio: ${(metrics.distinctWordRatio * 100).toFixed(1)}% (lower = more repetitive)`,
167
+ `- Flesch Reading Ease: ${metrics.fleschReadingEase} (${metrics.fleschLabel})`,
168
+ `- Repeated 5-gram phrase density: ${(metrics.repeatedPhraseDensity * 100).toFixed(1)}%`,
169
+ "",
170
+ `MACRO STRUCTURE: ${blueprint.macro.name} | TONE: ${blueprint.tone} | THEME: ${blueprint.theme}`,
171
+ "",
172
+ "Respond with STRICT JSON only, no markdown fences, no commentary outside the JSON, matching exactly this shape:",
173
+ `{"scores":{"plotStructure":n,"characterization":n,"proseStyle":n,"dialogue":n,"pacing":n,"emotionalResonance":n,"thematicDepth":n,"realWorldRelation":n,"originality":n,"readabilityJudgment":n,"marketability":n,"overall":n},"justifications":{"plotStructure":"...","characterization":"...","proseStyle":"...","dialogue":"...","pacing":"...","emotionalResonance":"...","thematicDepth":"...","realWorldRelation":"...","originality":"...","readabilityJudgment":"...","marketability":"...","overall":"..."},"rewriteTargets":[{"scope":"chapter|scene|paragraph|sentence","location":"e.g. Chapter 3, second scene","issue":"...","suggestion":"..."}]}`,
174
+ "Provide 5-12 rewriteTargets spanning multiple scopes (some chapter-level, some scene-level, some sentence-level) exactly as a real manuscript editor's marginalia would.",
175
+ "",
176
+ "MANUSCRIPT:",
177
+ fullText.slice(0, 60000),
178
+ ].join("\n");
179
+ }
180
+
181
+ function extractJson(raw: string): unknown {
182
+ const start = raw.indexOf("{");
183
+ const end = raw.lastIndexOf("}");
184
+ if (start === -1 || end === -1 || end <= start) throw new Error("no JSON object found in judge response");
185
+ return JSON.parse(raw.slice(start, end + 1));
186
+ }
187
+
188
+ export function parseJudgeResponse(raw: string): {
189
+ rubric: JudgeRubricScores | null;
190
+ justifications: Partial<Record<keyof JudgeRubricScores, string>> | null;
191
+ rewriteTargets: RewriteTarget[];
192
+ parseError: string | null;
193
+ } {
194
+ try {
195
+ const parsed = extractJson(raw) as {
196
+ scores?: Partial<Record<string, number>>;
197
+ justifications?: Partial<Record<string, string>>;
198
+ rewriteTargets?: unknown[];
199
+ };
200
+ const scoresIn = parsed.scores ?? {};
201
+ const rubric = {} as JudgeRubricScores;
202
+ for (const k of RUBRIC_KEYS) {
203
+ const v = Number(scoresIn[k]);
204
+ rubric[k] = Number.isFinite(v) ? Math.max(1, Math.min(10, v)) : 5;
205
+ }
206
+ const justifications: Partial<Record<keyof JudgeRubricScores, string>> = {};
207
+ for (const k of RUBRIC_KEYS) {
208
+ const j = parsed.justifications?.[k];
209
+ if (typeof j === "string") justifications[k] = j;
210
+ }
211
+ const rewriteTargets: RewriteTarget[] = Array.isArray(parsed.rewriteTargets)
212
+ ? (parsed.rewriteTargets as unknown[])
213
+ .filter((t): t is Record<string, unknown> => !!t && typeof t === "object")
214
+ .map((t) => ({
215
+ scope: (["chapter", "scene", "paragraph", "sentence"].includes(String(t.scope)) ? t.scope : "chapter") as RewriteTarget["scope"],
216
+ location: String(t.location ?? "unspecified"),
217
+ issue: String(t.issue ?? ""),
218
+ suggestion: String(t.suggestion ?? ""),
219
+ }))
220
+ : [];
221
+ return { rubric, justifications, rewriteTargets, parseError: null };
222
+ } catch (e) {
223
+ return { rubric: null, justifications: null, rewriteTargets: [], parseError: e instanceof Error ? e.message : String(e) };
224
+ }
225
+ }
226
+
227
+ export type JudgeGenerateFn = (userMessage: string) => Promise<string>;
228
+
229
+ export async function gradeManuscript(
230
+ fullText: string,
231
+ blueprint: SageBlueprint,
232
+ generate: JudgeGenerateFn,
233
+ ): Promise<ManuscriptGradeReport> {
234
+ const metrics = computeProseMetrics(fullText);
235
+ const prompt = buildJudgePrompt(fullText, blueprint, metrics);
236
+ const raw = await generate(prompt);
237
+ const parsed = parseJudgeResponse(raw);
238
+ return {
239
+ metrics,
240
+ rubric: parsed.rubric,
241
+ justifications: parsed.justifications,
242
+ rewriteTargets: parsed.rewriteTargets,
243
+ rawJudgeText: raw,
244
+ parseError: parsed.parseError,
245
+ };
246
+ }
@@ -0,0 +1,53 @@
1
+ /**
2
+ * SAGE PRNG — Mulberry32 (same family as Williams style persona).
3
+ * Deterministic: same seed ⇒ same sequence. No external deps.
4
+ */
5
+
6
+ export function mulberry32(seed: number): () => number {
7
+ let s = seed | 0;
8
+ return () => {
9
+ s = (s + 0x6d2b79f5) | 0;
10
+ let t = Math.imul(s ^ (s >>> 15), 1 | s);
11
+ t = (t + Math.imul(t ^ (t >>> 7), 61 | t)) ^ t;
12
+ return ((t ^ (t >>> 14)) >>> 0) / 4294967296;
13
+ };
14
+ }
15
+
16
+ export function randRange(rng: () => number, lo: number, hi: number): number {
17
+ return lo + rng() * (hi - lo);
18
+ }
19
+
20
+ export function randPick<T>(rng: () => number, arr: readonly T[]): T {
21
+ return arr[Math.floor(rng() * arr.length) % arr.length];
22
+ }
23
+
24
+ export function randPickN<T>(rng: () => number, arr: readonly T[], n: number): T[] {
25
+ const copy = arr.slice();
26
+ const out: T[] = [];
27
+ const count = Math.min(n, copy.length);
28
+ for (let i = 0; i < count; i += 1) {
29
+ const idx = Math.floor(rng() * copy.length);
30
+ out.push(copy.splice(idx, 1)[0]);
31
+ }
32
+ return out;
33
+ }
34
+
35
+ export function newSageSeed(): number {
36
+ return (Math.floor(Math.random() * 0xffffffff) >>> 0) || 1;
37
+ }
38
+
39
+ /** FNV-1a + xorshift mix — matches innovation-genome determinism pattern. */
40
+ export function mix32(seed: number, index: number): number {
41
+ const s = `${seed}:${index}`;
42
+ let h = 0x811c9dc5;
43
+ for (let i = 0; i < s.length; i += 1) {
44
+ h ^= s.charCodeAt(i);
45
+ h = Math.imul(h, 0x01000193) >>> 0;
46
+ }
47
+ h ^= h >>> 16;
48
+ h = Math.imul(h, 0x7feb352d) >>> 0;
49
+ h ^= h >>> 15;
50
+ h = Math.imul(h, 0x846ca68b) >>> 0;
51
+ h ^= h >>> 16;
52
+ return h >>> 0;
53
+ }