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,293 @@
1
+ import axios from "axios";
2
+ import {
3
+ prismaFetchRead,
4
+ prismaFetchSearch,
5
+ resolvePrismaFetchAvailability,
6
+ type GroundingBackend,
7
+ } from "./connectors/prismafetch";
8
+ import { browserScraperRead, browserScraperSearch } from "./browser-search-scraper";
9
+
10
+ export type { GroundingBackend } from "./connectors/prismafetch";
11
+
12
+ export interface JinaSearchResult {
13
+ title: string;
14
+ url: string;
15
+ description: string;
16
+ content: string;
17
+ }
18
+
19
+ export interface JinaSearchResponse {
20
+ code: number;
21
+ data: JinaSearchResult[];
22
+ }
23
+
24
+ async function runJinaSearch(
25
+ query: string,
26
+ apiKey: string,
27
+ depth: number = 5,
28
+ retries = 2,
29
+ ): Promise<JinaSearchResult[]> {
30
+ const encoded = encodeURIComponent(query);
31
+ const url = `https://s.jina.ai/${encoded}?num=${depth}`;
32
+ let lastError: unknown = null;
33
+
34
+ for (let attempt = 0; attempt <= retries; attempt++) {
35
+ try {
36
+ const response = await axios.get<JinaSearchResponse>(url, {
37
+ headers: {
38
+ Accept: "application/json",
39
+ Authorization: `Bearer ${apiKey}`,
40
+ "X-Retain-Images": "none",
41
+ },
42
+ timeout: 45000,
43
+ });
44
+ if (response.data && Array.isArray(response.data.data)) {
45
+ return response.data.data;
46
+ }
47
+ return [];
48
+ } catch (err: any) {
49
+ lastError = err;
50
+ const status = err?.response?.status;
51
+ if (attempt < retries && (!status || status === 429 || status >= 500)) {
52
+ await new Promise((resolve) => setTimeout(resolve, 1000 * Math.pow(2, attempt)));
53
+ continue;
54
+ }
55
+ throw err;
56
+ }
57
+ }
58
+ throw lastError instanceof Error ? lastError : new Error("Jina search failed");
59
+ }
60
+
61
+ async function runJinaRead(targetUrl: string, apiKey: string, retries = 1): Promise<string> {
62
+ const url = `https://r.jina.ai/${targetUrl}`;
63
+ let lastError: unknown = null;
64
+ for (let attempt = 0; attempt <= retries; attempt++) {
65
+ try {
66
+ const response = await axios.get(url, {
67
+ headers: {
68
+ Accept: "text/plain",
69
+ Authorization: `Bearer ${apiKey}`,
70
+ "X-Retain-Images": "none",
71
+ },
72
+ timeout: 15000,
73
+ });
74
+ return typeof response.data === "string" ? response.data : "";
75
+ } catch (err: any) {
76
+ lastError = err;
77
+ const status = err?.response?.status;
78
+ if (attempt < retries && (!status || status === 429 || status >= 500)) {
79
+ await new Promise((resolve) => setTimeout(resolve, 1000));
80
+ continue;
81
+ }
82
+ throw err;
83
+ }
84
+ }
85
+ throw lastError instanceof Error ? lastError : new Error(`Jina read failed for ${targetUrl}`);
86
+ }
87
+
88
+ /**
89
+ * PrismaFetch/browser is PRIMARY, OG browser scraper is SECONDARY, Jina is BACKUP.
90
+ *
91
+ * Token-conservation policy: we only call Jina if PrismaFetch and the OG scraper
92
+ * are unavailable/empty. If either local layer succeeds, Jina is never invoked.
93
+ */
94
+ export async function searchWithGroundingFallback(
95
+ query: string,
96
+ apiKey: string,
97
+ depth: number = 5,
98
+ opts?: {
99
+ retries?: number;
100
+ prismafetchUrl?: string;
101
+ /** If false, PrismaFetch is skipped entirely (no localhost probe). */
102
+ prismaEnabled?: boolean;
103
+ /** Allow falling back to Jina if both local layers fail (default true). */
104
+ allowJinaFallback?: boolean;
105
+ /** Force Jina path (skip PrismaFetch entirely). Used by the "Test Jina" button. */
106
+ forceJina?: boolean;
107
+ /** Legacy alias retained for compatibility (no longer used as primary switch). */
108
+ allowPrismaFetchFallback?: boolean;
109
+ onDebug?: (msg: string) => void;
110
+ },
111
+ ): Promise<{ provider: GroundingBackend; results: JinaSearchResult[] }> {
112
+ const hasJinaKey = !!apiKey.trim();
113
+ const allowJina = (opts?.allowJinaFallback ?? true) && hasJinaKey;
114
+ const forceJina = !!opts?.forceJina;
115
+ const prismaEnabled = opts?.prismaEnabled ?? true;
116
+
117
+ // ── PRIMARY: PrismaFetch local service (skipped entirely if disabled) ──
118
+ if (!forceJina && prismaEnabled) {
119
+ const availability = await resolvePrismaFetchAvailability(opts?.prismafetchUrl);
120
+ if (availability.ok) {
121
+ try {
122
+ const local = await prismaFetchSearch(query, {
123
+ baseUrl: availability.baseUrl,
124
+ count: depth,
125
+ });
126
+ if (local.results.length > 0) {
127
+ opts?.onDebug?.(`Primary backend: PrismaFetch (${local.backend}) @ ${availability.baseUrl} → ${local.results.length} sources`);
128
+ return { provider: "prismafetch-local", results: local.results };
129
+ }
130
+ opts?.onDebug?.(`PrismaFetch returned 0 results — escalating to OG browser scraper`);
131
+ } catch (err) {
132
+ opts?.onDebug?.(`PrismaFetch search failed (${String((err as Error)?.message ?? err)}) — escalating to OG browser scraper`);
133
+ }
134
+ } else {
135
+ opts?.onDebug?.(`PrismaFetch unavailable (${availability.reason ?? "PrismaFetch offline"}) — escalating to OG browser scraper`);
136
+ }
137
+ } else if (forceJina) {
138
+ opts?.onDebug?.(`Forcing Jina path (PrismaFetch primary bypassed by caller).`);
139
+ } else {
140
+ opts?.onDebug?.(`PrismaFetch disabled — going straight to OG browser scraper (workhorse).`);
141
+ }
142
+
143
+ // ── SECONDARY: OG browser scraper + academic APIs in parallel ───────
144
+ if (!forceJina) {
145
+ try {
146
+ // browserScraperSearch now internally runs OG web engines + academic APIs
147
+ // concurrently, then merges and relevance-filters them. Do not call the
148
+ // academic APIs a second time here or we double network/memory cost.
149
+ const scraperResults = await browserScraperSearch(query, { count: depth, onDebug: (msg) => opts?.onDebug?.(msg) }).catch(() => []);
150
+ // Dedup and relevance-filter against query keywords so off-topic hits
151
+ // ("Please Please Me", dictionary entries) are dropped.
152
+ const qWords = query.toLowerCase().split(/[^a-z0-9]+/).filter(w => w.length > 4);
153
+ const isRelevant = (r: { title: string; content?: string; description?: string; url: string }) => {
154
+ const hay = `${r.title} ${r.description ?? ""} ${r.content ?? ""}`.toLowerCase();
155
+ if (/please please me|dictionary|merriam|collins dictionary|cambridge dictionary|\bgrammar\b|definition (?:of|and meaning)/i.test(hay)) return false;
156
+ if (qWords.length === 0) return true;
157
+ const hitCount = qWords.filter(w => hay.includes(w)).length;
158
+ return hitCount >= Math.min(2, qWords.length); // need ≥2 query keywords (or all if <2)
159
+ };
160
+ const seen = new Set<string>();
161
+ const merged: JinaSearchResult[] = [];
162
+ let dropped = 0;
163
+ for (const r of scraperResults) {
164
+ if (!r.url || seen.has(r.url)) continue;
165
+ if (!isRelevant(r)) { dropped++; continue; }
166
+ seen.add(r.url);
167
+ merged.push({ title: r.title, url: r.url, description: r.description, content: r.content || r.description || "" });
168
+ }
169
+ if (merged.length > 0) {
170
+ opts?.onDebug?.(`Secondary backend: OG scraper+academic → ${merged.length} relevant (${dropped} off-topic dropped)`);
171
+ return { provider: "browser-scraper", results: merged.slice(0, depth * 2) };
172
+ }
173
+ if (dropped > 0) opts?.onDebug?.(`Secondary backend: all ${dropped} results filtered as off-topic — escalating`);
174
+ opts?.onDebug?.(`OG browser scraper + academic APIs returned 0 combined results — escalating to Jina backup`);
175
+ } catch (err) {
176
+ opts?.onDebug?.(`Secondary search failed (${String((err as Error)?.message ?? err)}) — escalating to Jina backup`);
177
+ }
178
+ }
179
+
180
+ // ── BACKUP: Jina cloud (only reached when primary failed/empty) ─────
181
+ if (allowJina) {
182
+ opts?.onDebug?.(`Backup backend: Jina cloud (s.jina.ai) — consuming Jina tokens`);
183
+ const results = await runJinaSearch(query, apiKey, depth, opts?.retries ?? 2);
184
+ return { provider: "jina", results };
185
+ }
186
+
187
+ if (!hasJinaKey) {
188
+ opts?.onDebug?.("All local grounding layers failed and no Jina key is configured; continuing with zero retrieved sources.");
189
+ return { provider: "browser-scraper", results: [] };
190
+ }
191
+ opts?.onDebug?.("All local grounding layers failed and Jina backup is disabled; continuing with zero retrieved sources.");
192
+ return { provider: "browser-scraper", results: [] };
193
+ }
194
+
195
+ /**
196
+ * PrismaFetch read is PRIMARY, OG browser scraper read is SECONDARY, Jina Reader is BACKUP.
197
+ *
198
+ * `skipUrls` is an explicit dedup gate: if the URL is already in the set, this
199
+ * function returns an empty string immediately so neither backend is invoked.
200
+ */
201
+ export async function readWithGroundingFallback(
202
+ targetUrl: string,
203
+ apiKey: string,
204
+ opts?: {
205
+ retries?: number;
206
+ prismafetchUrl?: string;
207
+ allowJinaFallback?: boolean;
208
+ forceJina?: boolean;
209
+ /** Already-fetched URLs — short-circuit to avoid duplicate work. */
210
+ skipUrls?: Set<string>;
211
+ onDebug?: (msg: string) => void;
212
+ },
213
+ ): Promise<{ provider: GroundingBackend | "skipped"; text: string }> {
214
+ if (opts?.skipUrls?.has(targetUrl)) {
215
+ opts.onDebug?.(`Dedup short-circuit: ${targetUrl} already fetched in a prior pass`);
216
+ return { provider: "skipped", text: "" };
217
+ }
218
+
219
+ const hasJinaKey = !!apiKey.trim();
220
+ const allowJina = (opts?.allowJinaFallback ?? true) && hasJinaKey;
221
+ const forceJina = !!opts?.forceJina;
222
+
223
+ if (!forceJina) {
224
+ const availability = await resolvePrismaFetchAvailability(opts?.prismafetchUrl);
225
+ if (availability.ok) {
226
+ try {
227
+ const local = await prismaFetchRead(targetUrl, { baseUrl: availability.baseUrl });
228
+ if (local.markdown && local.markdown.trim().length > 0) {
229
+ opts?.onDebug?.(`Primary read: PrismaFetch (${local.tier ?? "extract"}) → ${local.markdown.length} chars`);
230
+ opts?.skipUrls?.add(targetUrl);
231
+ return { provider: "prismafetch-local", text: local.markdown };
232
+ }
233
+ opts?.onDebug?.(`PrismaFetch read returned empty markdown — escalating to OG browser scraper`);
234
+ } catch (err) {
235
+ opts?.onDebug?.(`PrismaFetch read failed (${String((err as Error)?.message ?? err)}) — escalating to OG browser scraper`);
236
+ }
237
+ } else {
238
+ opts?.onDebug?.(`PrismaFetch read unavailable (${availability.reason ?? "PrismaFetch offline"}) — escalating to OG browser scraper`);
239
+ }
240
+ }
241
+
242
+ if (!forceJina) {
243
+ try {
244
+ const text = await browserScraperRead(targetUrl, { onDebug: (msg) => opts?.onDebug?.(msg) });
245
+ if (text.trim().length > 0) {
246
+ opts?.skipUrls?.add(targetUrl);
247
+ return { provider: "browser-scraper", text };
248
+ }
249
+ opts?.onDebug?.("OG browser scraper read returned empty text — escalating to Jina backup");
250
+ } catch (err) {
251
+ opts?.onDebug?.(`OG browser scraper read failed (${String((err as Error)?.message ?? err)}) — escalating to Jina backup`);
252
+ }
253
+ }
254
+
255
+ if (allowJina) {
256
+ opts?.onDebug?.(`Backup read: Jina Reader (r.jina.ai) — consuming Jina tokens`);
257
+ const text = await runJinaRead(targetUrl, apiKey, opts?.retries ?? 1);
258
+ opts?.skipUrls?.add(targetUrl);
259
+ return { provider: "jina", text };
260
+ }
261
+
262
+ if (!hasJinaKey) return { provider: "browser-scraper", text: "" };
263
+ return { provider: "browser-scraper", text: "" };
264
+ }
265
+
266
+ export async function jinaSearch(
267
+ query: string,
268
+ apiKey: string,
269
+ depth: number = 5,
270
+ retries = 2,
271
+ ): Promise<JinaSearchResult[]> {
272
+ try {
273
+ const result = await searchWithGroundingFallback(query, apiKey, depth, { retries });
274
+ return result.results;
275
+ } catch (err: any) {
276
+ console.warn(`Grounding search failed for "${query}":`, err?.message);
277
+ return [];
278
+ }
279
+ }
280
+
281
+ export async function jinaRead(
282
+ targetUrl: string,
283
+ apiKey: string,
284
+ retries = 1,
285
+ ): Promise<string> {
286
+ try {
287
+ const result = await readWithGroundingFallback(targetUrl, apiKey, { retries });
288
+ return result.text;
289
+ } catch (err: any) {
290
+ console.warn(`Grounding read failed for ${targetUrl}:`, err?.message);
291
+ return "";
292
+ }
293
+ }
@@ -0,0 +1 @@
1
+ export * from "./jina.base";
@@ -0,0 +1,61 @@
1
+ /**
2
+ * Live telemetry — REAL measured counters accumulated during a run.
3
+ * Replaces the simulated AEGIS-PHI actuals with measured values:
4
+ * - tokensIn/Out estimated from actual prompt/response char counts (≈4 chars/token)
5
+ * - toolCalls counted as real jinaSearch / model calls fire
6
+ * - sources counted from real Jina results
7
+ * - hypotheses/claims counted from real pipeline output
8
+ * - elapsedMs from a real monotonic clock
9
+ * - entropy lowered as the run converges (real progress, not random)
10
+ */
11
+
12
+ export interface LiveTelemetry {
13
+ running: boolean;
14
+ phase: string;
15
+ startedAt: number;
16
+ elapsedMs: number;
17
+ tokensIn: number;
18
+ tokensOut: number;
19
+ toolCalls: number;
20
+ searchCalls: number;
21
+ modelCalls: number;
22
+ computeCalls: number;
23
+ sources: number;
24
+ hypotheses: number;
25
+ claimsTotal: number;
26
+ claimsVerified: number;
27
+ injectionsBlocked: number;
28
+ sanitizerStrips: number;
29
+ anchorCoverage: number | null;
30
+ measuredCoverage: number | null;
31
+ coverageNumerator: number;
32
+ coverageDenominator: number;
33
+ entropy: number;
34
+ contradictions: number;
35
+ tier: number | null;
36
+ sscpHash: string | null;
37
+ evidenceTier: "CTX" | "SRC" | "TOOL" | "DERIV";
38
+ pipelineStage: number;
39
+ pipelineTrace?: import("./pipeline").PipelineTrace[];
40
+ artifactResolved: number;
41
+ artifactUnresolved: number;
42
+ }
43
+
44
+ export function emptyTelemetry(): LiveTelemetry {
45
+ return {
46
+ running: false, phase: "idle", startedAt: 0, elapsedMs: 0,
47
+ tokensIn: 0, tokensOut: 0, toolCalls: 0, searchCalls: 0, modelCalls: 0, computeCalls: 0,
48
+ sources: 0, hypotheses: 0, claimsTotal: 0, claimsVerified: 0,
49
+ injectionsBlocked: 0, sanitizerStrips: 0, anchorCoverage: null,
50
+ measuredCoverage: null, coverageNumerator: 0, coverageDenominator: 0,
51
+ entropy: 1, contradictions: 0, tier: null, sscpHash: null,
52
+ evidenceTier: "CTX", pipelineStage: 0,
53
+ artifactResolved: 0, artifactUnresolved: 0,
54
+ };
55
+ }
56
+
57
+ /** Rough token estimate from text (≈4 chars/token, std GPT-family heuristic). */
58
+ export function estTokens(text: string): number {
59
+ if (!text) return 0;
60
+ return Math.max(1, Math.round(text.length / 4));
61
+ }
@@ -0,0 +1,84 @@
1
+ /**
2
+ * LongWriter — Decomposes ultra-long generation into subtasks.
3
+ * Enables small-context models (e.g. 4k-8k) to produce coherent 10,000+ word papers.
4
+ */
5
+
6
+ export interface LongWriterPlan {
7
+ totalTargetWords: number;
8
+ sections: Array<{
9
+ id: string;
10
+ title: string;
11
+ targetWords: number;
12
+ requiredPoints: string[];
13
+ dependsOn: string[];
14
+ }>;
15
+ }
16
+
17
+ export function generateLongWriterPlan(query: string, targetWords = 2000): LongWriterPlan {
18
+ void query;
19
+ // Deterministic section planner
20
+ const sections = [
21
+ {
22
+ id: "intro",
23
+ title: "Introduction & BLUF",
24
+ targetWords: Math.round(targetWords * 0.15),
25
+ requiredPoints: ["Problem definition", "Direct answer", "Impact magnitude"],
26
+ dependsOn: [],
27
+ },
28
+ {
29
+ id: "context",
30
+ title: "Market / Field Context",
31
+ targetWords: Math.round(targetWords * 0.20),
32
+ requiredPoints: ["Prior state", "Disruptive complication"],
33
+ dependsOn: ["intro"],
34
+ },
35
+ {
36
+ id: "analysis",
37
+ title: "Deep Diagnostic Analysis",
38
+ targetWords: Math.round(targetWords * 0.35),
39
+ requiredPoints: ["Evidence grounding", "Causal mechanism"],
40
+ dependsOn: ["context"],
41
+ },
42
+ {
43
+ id: "recommendation",
44
+ title: "Strategic Recommendations",
45
+ targetWords: Math.round(targetWords * 0.20),
46
+ requiredPoints: ["Option set", "Implementation roadmap"],
47
+ dependsOn: ["analysis"],
48
+ },
49
+ {
50
+ id: "risk",
51
+ title: "Risk & Falsification Matrix",
52
+ targetWords: Math.round(targetWords * 0.10),
53
+ requiredPoints: ["Top 3 risks", "What would reverse conclusion"],
54
+ dependsOn: ["recommendation"],
55
+ },
56
+ ];
57
+
58
+ return { totalTargetWords: targetWords, sections };
59
+ }
60
+
61
+ /**
62
+ * Fragment-based generation protocol.
63
+ * For each section, the controller provides:
64
+ * 1. Global report capsule
65
+ * 2. Section specific evidence
66
+ * 3. Preceding section summary (virtual context)
67
+ */
68
+ export function buildFragmentPrompt(
69
+ section: LongWriterPlan["sections"][0],
70
+ capsule: any,
71
+ precedingSummary: string
72
+ ) {
73
+ return `DRAFTING SECTION: ${section.title}
74
+ TARGET: ${section.targetWords} words.
75
+ REQUIRED: ${section.requiredPoints.join(", ")}
76
+
77
+ REPORT CAPSULE:
78
+ ${JSON.stringify(capsule)}
79
+
80
+ VIRTUAL CONTEXT (Preceding summary):
81
+ ${precedingSummary}
82
+
83
+ Write the section prose directly. No preamble.`;
84
+ }