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,426 @@
1
+ /**
2
+ * Global shared state — single source of truth for ALL pages.
3
+ *
4
+ * Persistence strategy:
5
+ * - keys, model, searchDepth, personaSeed → localStorage (survive refresh)
6
+ * - messages, lastRun, pipelineTrace → sessionStorage (survive tab switch, clear on new session)
7
+ * - busyState, statuses → in-memory only
8
+ */
9
+ import {
10
+ createContext,
11
+ useCallback,
12
+ useContext,
13
+ useEffect,
14
+ useMemo,
15
+ useState,
16
+ type ReactNode,
17
+ } from "react";
18
+ import type { ModelId, ProviderId } from "./models";
19
+ import { generatePersona, newSessionSeed, type WilliamsPersona } from "./williams-style";
20
+ import type { ExtractedConstraints } from "./constraints";
21
+ import type { PipelineTrace } from "./pipeline";
22
+ import { emptyTelemetry, type LiveTelemetry } from "./live-telemetry";
23
+ import { OMEGA_TEMPLATES, type OmegaTemplate } from "./omega-templates";
24
+ import type { SSCPReceipt } from "./sscp";
25
+ import type { BeliefState } from "./gbse/types";
26
+ import type { RelevanceGraph } from "./gbse/graph";
27
+
28
+ export type ConnectionStatus = "idle" | "testing" | "connected" | "error";
29
+
30
+ export interface ApiKeys {
31
+ gemini: string;
32
+ claude: string;
33
+ grok: string;
34
+ deepseek: string;
35
+ jina: string;
36
+ serpapi: string;
37
+ serpapiProxy: string;
38
+ marketData: string;
39
+ }
40
+
41
+ export interface ToolResult {
42
+ title: string;
43
+ url: string;
44
+ content: string;
45
+ phase?: "initial" | "second-pass";
46
+ hypothesis?: string;
47
+ provider?: "jina" | "prismafetch-local" | "browser-scraper";
48
+ tier?: string;
49
+ }
50
+
51
+ export interface GroundedClaim {
52
+ id: string;
53
+ text: string;
54
+ status: "VERIFIED" | "UNVERIFIED";
55
+ sourceIndex?: number;
56
+ failureClass: string;
57
+ solution: string;
58
+ }
59
+
60
+ export interface HypothesisEvidence {
61
+ claim: string;
62
+ searchQuery: string;
63
+ reason: string;
64
+ confidence: "high" | "medium" | "low";
65
+ status: "CONFIRMED" | "UNCONFIRMED";
66
+ sources: ToolResult[];
67
+ }
68
+
69
+ export interface ChatMessage {
70
+ id: string;
71
+ role: "user" | "assistant";
72
+ content: string;
73
+ ts: number;
74
+ model?: ModelId;
75
+ injection?: { blocked: boolean; patterns: string[] };
76
+ toolResults?: ToolResult[];
77
+ verificationPlan?: HypothesisEvidence[];
78
+ claims?: GroundedClaim[];
79
+ coherence?: { contradictions: string[]; drifts: string[] };
80
+ constraints?: ExtractedConstraints;
81
+ sanitizerRemovedSegments?: number;
82
+ usedMultiPass?: boolean;
83
+ pipelineTrace?: PipelineTrace[];
84
+ computeRecords?: import("./compute-sandbox").ComputeRecord[];
85
+ entitySheet?: import("./entity-resolver").EntitySheet;
86
+ artifactResponse?: import("./artifacts").ArtifactResponse;
87
+ qualityReport?: import("./quality-score").QualityReport;
88
+ adversarialPasses?: import("./n-deep").NDeepPassSummary[];
89
+ }
90
+
91
+ export interface LastRunSnapshot {
92
+ query: string;
93
+ model: ModelId;
94
+ finalAnswer: string;
95
+ totalTokens: number;
96
+ elapsedMs: number;
97
+ sources: number;
98
+ verifiedClaims: number;
99
+ totalClaims: number;
100
+ constraints?: ExtractedConstraints;
101
+ startedAt: number;
102
+ finishedAt: number;
103
+ pipelineTrace?: PipelineTrace[];
104
+ tier?: number | null;
105
+ artifactResponse?: import("./artifacts").ArtifactResponse;
106
+ measuredCoverage?: number;
107
+ coverageNumerator?: number;
108
+ coverageDenominator?: number;
109
+ }
110
+
111
+ export interface AppSettings {
112
+ deepResearch: boolean; // enable 4-stage multi-pass pipeline
113
+ searchDepth: number;
114
+ showDebugTrace: boolean;
115
+ autoAuditConnectors: boolean;
116
+ templateEnabled: boolean; // apply an OMEGA template to outputs
117
+ activeTemplateId: string; // which OMEGA / custom template
118
+ styleMode: string; // "OMEGA-DEFAULT" or override token
119
+ unifiedMemory: Record<string, any>; // Persistent shared context
120
+ prismafetchEnabled: boolean;
121
+ prismafetchAutoFallback: boolean;
122
+ prismafetchUrl: string;
123
+ prismafetchReadMode: "auto" | "fast_static" | "render_headless" | "visual_only";
124
+ prismafetchOcr: boolean;
125
+ nDeepEnabled: boolean;
126
+ nDeepMaxPasses: number;
127
+ nDeepConvergenceThreshold: number;
128
+ clusterSearch: boolean; // run all hypothesis searches in one parallel cluster
129
+ clusterSize: number; // max parallel searches per cluster wave
130
+ forceSloop: boolean; // SLOOP long-form multi-page report mode
131
+ sloopPages: number; // target pages for SLOOP long-form mode
132
+ }
133
+
134
+ const DEFAULT_SETTINGS: AppSettings = {
135
+ deepResearch: false,
136
+ searchDepth: 5,
137
+ showDebugTrace: false,
138
+ autoAuditConnectors: false,
139
+ templateEnabled: false,
140
+ activeTemplateId: "OMEGA-STRATEGY",
141
+ styleMode: "OMEGA-DEFAULT",
142
+ unifiedMemory: {},
143
+ prismafetchEnabled: false,
144
+ prismafetchAutoFallback: true,
145
+ prismafetchUrl: "http://127.0.0.1:8080",
146
+ prismafetchReadMode: "auto",
147
+ prismafetchOcr: false,
148
+ nDeepEnabled: false,
149
+ nDeepMaxPasses: 4,
150
+ nDeepConvergenceThreshold: 0.94,
151
+ clusterSearch: true,
152
+ clusterSize: 8,
153
+ forceSloop: false,
154
+ sloopPages: 8,
155
+ };
156
+
157
+ interface AppStateValue {
158
+ messages: ChatMessage[];
159
+ pushMessage: (m: ChatMessage) => void;
160
+ updateLastMessage: (updater: (m: ChatMessage) => ChatMessage) => void;
161
+ clearMessages: () => void;
162
+ input: string;
163
+ setInput: (v: string) => void;
164
+ keys: ApiKeys;
165
+ setKeys: (updater: ApiKeys | ((prev: ApiKeys) => ApiKeys)) => void;
166
+ statuses: Record<ProviderId | "jina" | "prismafetch", ConnectionStatus>;
167
+ setStatus: (provider: ProviderId | "jina" | "prismafetch", status: ConnectionStatus) => void;
168
+ model: ModelId;
169
+ setModel: (m: ModelId) => void;
170
+ persona: WilliamsPersona;
171
+ reseedPersona: (seed?: number) => void;
172
+ personaPinned: boolean;
173
+ setPersonaPinned: (pinned: boolean) => void;
174
+ lastRun: LastRunSnapshot | null;
175
+ setLastRun: (run: LastRunSnapshot | null) => void;
176
+ settings: AppSettings;
177
+ setSetting: <K extends keyof AppSettings>(k: K, v: AppSettings[K]) => void;
178
+ searchDepth: number;
179
+ setSearchDepth: (n: number) => void;
180
+ busyState: string | null;
181
+ setBusyState: (s: string | null) => void;
182
+ debugEvents: string[];
183
+ pushDebugEvent: (msg: string) => void;
184
+ clearDebugEvents: () => void;
185
+ reasoningTrace: any[];
186
+ pushTraceEntry: (entry: any) => void;
187
+ telemetry: LiveTelemetry;
188
+ patchTelemetry: (p: Partial<LiveTelemetry>) => void;
189
+ resetTelemetry: () => void;
190
+ memory: Record<string, any>;
191
+ updateMemory: (patch: Record<string, any>) => void;
192
+ templates: OmegaTemplate[];
193
+ addTemplate: (t: OmegaTemplate) => void;
194
+ deleteTemplate: (id: string) => void;
195
+ sscpReceipt: SSCPReceipt | null;
196
+ setSscpReceipt: (r: SSCPReceipt | null) => void;
197
+ beliefState: BeliefState | null;
198
+ setBeliefState: (s: BeliefState | null) => void;
199
+ relevanceGraph: RelevanceGraph | null;
200
+ setRelevanceGraph: (g: RelevanceGraph | null) => void;
201
+ }
202
+
203
+ const AppStateContext = createContext<AppStateValue | null>(null);
204
+
205
+ const LS_KEYS = "veritas.keys.v3";
206
+ const LS_MODEL = "veritas.model.v3";
207
+ const LS_SETTINGS = "veritas.settings.v2";
208
+ const LS_SEED = "veritas.persona.seed.v1";
209
+ const LS_CUSTOM_TEMPLATES = "veritas.custom.templates.v1";
210
+ const SS_MESSAGES = "veritas.messages.v1";
211
+ const SS_LASTRUN = "veritas.lastrun.v1";
212
+
213
+ function ls<T>(key: string, fallback: T): T {
214
+ try { const raw = localStorage.getItem(key); return raw ? (JSON.parse(raw) as T) : fallback; } catch { return fallback; }
215
+ }
216
+ function lsSet(key: string, v: unknown) { try { localStorage.setItem(key, JSON.stringify(v)); } catch { /**/ } }
217
+ function ss<T>(key: string, fallback: T): T {
218
+ try { const raw = sessionStorage.getItem(key); return raw ? (JSON.parse(raw) as T) : fallback; } catch { return fallback; }
219
+ }
220
+ function ssSet(key: string, v: unknown) { try { sessionStorage.setItem(key, JSON.stringify(v)); } catch { /**/ } }
221
+
222
+ const DEFAULT_KEYS: ApiKeys = { gemini: "", claude: "", grok: "", deepseek: "", jina: "", serpapi: "", serpapiProxy: "", marketData: "" };
223
+
224
+ export function AppStateProvider({ children }: { children: ReactNode }) {
225
+ const [messages, setMessages] = useState<ChatMessage[]>(() => ss(SS_MESSAGES, []));
226
+ const [input, setInput] = useState("");
227
+ const [keys, _setKeys] = useState<ApiKeys>(() => ({ ...DEFAULT_KEYS, ...ls<Partial<ApiKeys>>(LS_KEYS, {}) }));
228
+ const [statuses, setStatuses] = useState<Record<ProviderId | "jina" | "prismafetch", ConnectionStatus>>({
229
+ gemini: "idle", claude: "idle", grok: "idle", deepseek: "idle", jina: "idle", prismafetch: "idle",
230
+ });
231
+ const [model, _setModel] = useState<ModelId>(() => ls(LS_MODEL, "gemma-4-31b-it") as ModelId);
232
+ const [personaSeed, setPersonaSeed] = useState<number>(() => ls<number>(LS_SEED, newSessionSeed()));
233
+ const [personaPinned, setPersonaPinned] = useState(false);
234
+ const [lastRun, _setLastRun] = useState<LastRunSnapshot | null>(() => ss(SS_LASTRUN, null));
235
+ const [settings, _setSettings] = useState<AppSettings>(() => ({ ...DEFAULT_SETTINGS, ...ls<Partial<AppSettings>>(LS_SETTINGS, {}) }));
236
+ const [busyState, setBusyState] = useState<string | null>(null);
237
+ const [debugEvents, setDebugEvents] = useState<string[]>([]);
238
+ const [reasoningTrace, setReasoningTrace] = useState<any[]>([]);
239
+ const [telemetry, setTelemetry] = useState<LiveTelemetry>(() => emptyTelemetry());
240
+ const [customTemplates, setCustomTemplates] = useState<OmegaTemplate[]>(() => ls<OmegaTemplate[]>(LS_CUSTOM_TEMPLATES, []));
241
+ const [sscpReceipt, setSscpReceipt] = useState<SSCPReceipt | null>(null);
242
+ const [beliefState, setBeliefState] = useState<BeliefState | null>(null);
243
+ const [relevanceGraph, setRelevanceGraph] = useState<RelevanceGraph | null>(null);
244
+ const [memory, setMemory] = useState<Record<string, any>>(() => ls("veritas.memory.v1", {}));
245
+
246
+ const persona = useMemo(() => generatePersona(personaSeed), [personaSeed]);
247
+
248
+ const templates = useMemo(() => [...OMEGA_TEMPLATES, ...customTemplates], [customTemplates]);
249
+
250
+ const patchTelemetry = useCallback((p: Partial<LiveTelemetry>) => {
251
+ setTelemetry(prev => ({ ...prev, ...p }));
252
+ }, []);
253
+ const resetTelemetry = useCallback(() => setTelemetry(emptyTelemetry()), []);
254
+
255
+ const addTemplate = useCallback((t: OmegaTemplate) => {
256
+ setCustomTemplates(prev => {
257
+ const next = [...prev.filter(x => x.id !== t.id), t];
258
+ lsSet(LS_CUSTOM_TEMPLATES, next);
259
+ return next;
260
+ });
261
+ }, []);
262
+ const deleteTemplate = useCallback((id: string) => {
263
+ setCustomTemplates(prev => {
264
+ const next = prev.filter(x => x.id !== id);
265
+ lsSet(LS_CUSTOM_TEMPLATES, next);
266
+ return next;
267
+ });
268
+ }, []);
269
+
270
+ const updateMemory = useCallback((patch: Record<string, any>) => {
271
+ setMemory(prev => {
272
+ const next = { ...prev, ...patch };
273
+ lsSet("veritas.memory.v1", next);
274
+ return next;
275
+ });
276
+ }, []);
277
+
278
+ // Persist messages to sessionStorage — trim heavy fields to prevent OOM
279
+ useEffect(() => {
280
+ try {
281
+ const trimmed = messages.map(m => ({
282
+ ...m,
283
+ toolResults: m.toolResults?.map(tr => ({
284
+ ...tr,
285
+ content: tr.content?.slice(0, 200) ?? "",
286
+ })),
287
+ pipelineTrace: undefined,
288
+ entitySheet: undefined,
289
+ computeRecords: undefined,
290
+ }));
291
+ ssSet(SS_MESSAGES, trimmed);
292
+ } catch {
293
+ try {
294
+ ssSet(SS_MESSAGES, messages.slice(-6).map(m => ({
295
+ id: m.id, role: m.role, content: m.content.slice(0, 2000),
296
+ ts: m.ts, model: m.model,
297
+ })));
298
+ } catch { /* give up on persistence */ }
299
+ }
300
+ }, [messages]);
301
+
302
+ useEffect(() => {
303
+ if (!telemetry.running) return;
304
+ const id = window.setInterval(() => {
305
+ setTelemetry(prev => prev.running ? { ...prev, elapsedMs: Date.now() - prev.startedAt } : prev);
306
+ }, 200);
307
+ return () => {
308
+ window.clearInterval(id);
309
+ };
310
+ }, [telemetry.running]);
311
+
312
+ const setKeys = useCallback((updater: ApiKeys | ((prev: ApiKeys) => ApiKeys)) => {
313
+ _setKeys(prev => {
314
+ const next = typeof updater === "function" ? updater(prev) : updater;
315
+ lsSet(LS_KEYS, next);
316
+ return next;
317
+ });
318
+ }, []);
319
+
320
+ const setModel = useCallback((m: ModelId) => { _setModel(m); lsSet(LS_MODEL, m); }, []);
321
+
322
+ const setStatus = useCallback((provider: ProviderId | "jina" | "prismafetch", status: ConnectionStatus) => {
323
+ setStatuses(prev => ({ ...prev, [provider]: status }));
324
+ }, []);
325
+
326
+ const pushMessage = useCallback((m: ChatMessage) => {
327
+ setMessages(prev => [...prev, m]);
328
+ }, []);
329
+
330
+ const updateLastMessage = useCallback((updater: (m: ChatMessage) => ChatMessage) => {
331
+ setMessages(prev => {
332
+ if (prev.length === 0) return prev;
333
+ const next = [...prev];
334
+ next[next.length - 1] = updater(next[next.length - 1]);
335
+ return next;
336
+ });
337
+ }, []);
338
+
339
+ const clearMessages = useCallback(() => { setMessages([]); ssSet(SS_MESSAGES, []); }, []);
340
+
341
+ const reseedPersona = useCallback((seed?: number) => {
342
+ if (personaPinned && seed === undefined) return;
343
+ const s = seed ?? newSessionSeed();
344
+ setPersonaSeed(s);
345
+ lsSet(LS_SEED, s);
346
+ }, [personaPinned]);
347
+
348
+ const setLastRun = useCallback((run: LastRunSnapshot | null) => {
349
+ _setLastRun(run);
350
+ ssSet(SS_LASTRUN, run);
351
+ }, []);
352
+
353
+ const setSetting = useCallback(<K extends keyof AppSettings>(k: K, v: AppSettings[K]) => {
354
+ _setSettings(prev => { const next = { ...prev, [k]: v }; lsSet(LS_SETTINGS, next); return next; });
355
+ }, []);
356
+
357
+ const pushDebugEvent = useCallback((msg: string) => {
358
+ const line = `[${new Date().toLocaleTimeString()}] ${String(msg)}`;
359
+ setDebugEvents(prev => {
360
+ const next = [...prev.slice(-199), line];
361
+ return next.length > 200 ? next.slice(-200) : next;
362
+ });
363
+ }, []);
364
+
365
+ const clearDebugEvents = useCallback(() => {
366
+ setDebugEvents([]);
367
+ setReasoningTrace([]);
368
+ }, []);
369
+
370
+ const pushTraceEntry = useCallback((entry: any) => {
371
+ const safeEntry = JSON.parse(JSON.stringify(entry));
372
+ setReasoningTrace(prev => {
373
+ const next = [...prev, { ...safeEntry, ts: Date.now() }];
374
+ return next.length > 300 ? next.slice(-300) : next;
375
+ });
376
+ }, []);
377
+
378
+ const searchDepth = settings.searchDepth;
379
+ const setSearchDepth = useCallback((n: number) => setSetting("searchDepth", n), [setSetting]);
380
+
381
+ const value = useMemo<AppStateValue>(() => ({
382
+ messages, pushMessage, updateLastMessage, clearMessages,
383
+ input, setInput,
384
+ keys, setKeys,
385
+ statuses, setStatus,
386
+ model, setModel,
387
+ persona, reseedPersona, personaPinned, setPersonaPinned,
388
+ lastRun, setLastRun,
389
+ settings, setSetting,
390
+ searchDepth, setSearchDepth,
391
+ busyState, setBusyState,
392
+ debugEvents, pushDebugEvent, clearDebugEvents,
393
+ reasoningTrace, pushTraceEntry,
394
+ telemetry, patchTelemetry, resetTelemetry,
395
+ templates, addTemplate, deleteTemplate,
396
+ sscpReceipt, setSscpReceipt,
397
+ beliefState, setBeliefState, relevanceGraph, setRelevanceGraph,
398
+ memory, updateMemory,
399
+ }), [
400
+ messages, pushMessage, updateLastMessage, clearMessages,
401
+ input,
402
+ keys, setKeys,
403
+ statuses, setStatus,
404
+ model, setModel,
405
+ persona, reseedPersona, personaPinned,
406
+ lastRun, setLastRun,
407
+ settings, setSetting,
408
+ searchDepth, setSearchDepth,
409
+ busyState,
410
+ debugEvents, pushDebugEvent, clearDebugEvents,
411
+ reasoningTrace, pushTraceEntry,
412
+ telemetry, patchTelemetry, resetTelemetry,
413
+ templates, addTemplate, deleteTemplate,
414
+ sscpReceipt,
415
+ beliefState, relevanceGraph,
416
+ memory, updateMemory,
417
+ ]);
418
+
419
+ return <AppStateContext.Provider value={value}>{children}</AppStateContext.Provider>;
420
+ }
421
+
422
+ export function useAppState(): AppStateValue {
423
+ const ctx = useContext(AppStateContext);
424
+ if (!ctx) throw new Error("useAppState must be inside AppStateProvider");
425
+ return ctx;
426
+ }
@@ -0,0 +1,97 @@
1
+ /**
2
+ * Public ticker → company name + sector registry.
3
+ * Deterministic source of truth for resolving tickers. Numeric facts
4
+ * (price, market cap, earnings dates) NEVER live here — those must
5
+ * come from a live data provider via setLiveStockResolver().
6
+ */
7
+
8
+ export interface TickerMeta {
9
+ name: string;
10
+ sector: string;
11
+ }
12
+
13
+ export const TICKER_NAMES: Record<string, TickerMeta> = {
14
+ // Mega-cap tech
15
+ AAPL: { name: "Apple Inc.", sector: "Consumer Electronics" },
16
+ MSFT: { name: "Microsoft Corp.", sector: "Software" },
17
+ GOOGL: { name: "Alphabet Inc. Class A", sector: "Internet Services" },
18
+ GOOG: { name: "Alphabet Inc. Class C", sector: "Internet Services" },
19
+ AMZN: { name: "Amazon.com Inc.", sector: "E-commerce / Cloud" },
20
+ NVDA: { name: "NVIDIA Corp.", sector: "Semiconductors" },
21
+ META: { name: "Meta Platforms Inc.", sector: "Social Media" },
22
+ TSLA: { name: "Tesla Inc.", sector: "Auto / Energy" },
23
+ // Semiconductors
24
+ AVGO: { name: "Broadcom Inc.", sector: "Semiconductors" },
25
+ AMD: { name: "Advanced Micro Devices", sector: "Semiconductors" },
26
+ INTC: { name: "Intel Corp.", sector: "Semiconductors" },
27
+ QCOM: { name: "Qualcomm Inc.", sector: "Semiconductors" },
28
+ MU: { name: "Micron Technology", sector: "Memory" },
29
+ ASML: { name: "ASML Holding NV", sector: "Semi Equipment" },
30
+ TSM: { name: "Taiwan Semiconductor", sector: "Semi Foundry" },
31
+ // Enterprise / SaaS
32
+ CRM: { name: "Salesforce Inc.", sector: "Enterprise SaaS" },
33
+ NOW: { name: "ServiceNow Inc.", sector: "Enterprise SaaS" },
34
+ ADBE: { name: "Adobe Inc.", sector: "Creative Software" },
35
+ ORCL: { name: "Oracle Corp.", sector: "Database" },
36
+ SNOW: { name: "Snowflake Inc.", sector: "Data Cloud" },
37
+ DDOG: { name: "Datadog Inc.", sector: "Observability" },
38
+ NET: { name: "Cloudflare Inc.", sector: "Edge Networking" },
39
+ CRWD: { name: "CrowdStrike Holdings", sector: "Cybersecurity" },
40
+ PANW: { name: "Palo Alto Networks", sector: "Cybersecurity" },
41
+ ZS: { name: "Zscaler Inc.", sector: "Cybersecurity" },
42
+ // Data / AI
43
+ PLTR: { name: "Palantir Technologies", sector: "Data Analytics" },
44
+ MDB: { name: "MongoDB Inc.", sector: "Database" },
45
+ // Hardware / Networking / Storage
46
+ STX: { name: "Seagate Technology", sector: "Storage" },
47
+ WDC: { name: "Western Digital", sector: "Storage" },
48
+ ANET: { name: "Arista Networks", sector: "Networking" },
49
+ CSCO: { name: "Cisco Systems", sector: "Networking" },
50
+ // Media / Streaming
51
+ NFLX: { name: "Netflix Inc.", sector: "Streaming" },
52
+ DIS: { name: "Walt Disney Co.", sector: "Media / Entertainment" },
53
+ SPOT: { name: "Spotify Technology", sector: "Audio Streaming" },
54
+ // Fintech / Payments
55
+ V: { name: "Visa Inc.", sector: "Payments" },
56
+ MA: { name: "Mastercard Inc.", sector: "Payments" },
57
+ PYPL: { name: "PayPal Holdings", sector: "Payments" },
58
+ COIN: { name: "Coinbase Global", sector: "Crypto Exchange" },
59
+ // Banks
60
+ JPM: { name: "JPMorgan Chase", sector: "Diversified Banks" },
61
+ GS: { name: "Goldman Sachs", sector: "Investment Banking" },
62
+ MS: { name: "Morgan Stanley", sector: "Investment Banking" },
63
+ BAC: { name: "Bank of America", sector: "Diversified Banks" },
64
+ WFC: { name: "Wells Fargo", sector: "Diversified Banks" },
65
+ // Healthcare / Pharma
66
+ LLY: { name: "Eli Lilly and Co.", sector: "Pharmaceuticals" },
67
+ UNH: { name: "UnitedHealth Group", sector: "Managed Care" },
68
+ JNJ: { name: "Johnson and Johnson", sector: "Pharmaceuticals" },
69
+ PFE: { name: "Pfizer Inc.", sector: "Pharmaceuticals" },
70
+ ABBV: { name: "AbbVie Inc.", sector: "Pharmaceuticals" },
71
+ MRK: { name: "Merck and Co.", sector: "Pharmaceuticals" },
72
+ // Energy
73
+ XOM: { name: "Exxon Mobil", sector: "Integrated Oil and Gas" },
74
+ CVX: { name: "Chevron Corp.", sector: "Integrated Oil and Gas" },
75
+ COP: { name: "ConocoPhillips", sector: "Exploration and Production" },
76
+ // Consumer
77
+ WMT: { name: "Walmart Inc.", sector: "Mass Retail" },
78
+ COST: { name: "Costco Wholesale", sector: "Warehouse Retail" },
79
+ HD: { name: "Home Depot Inc.", sector: "Home Improvement" },
80
+ TGT: { name: "Target Corp.", sector: "General Merchandise" },
81
+ // Industrials
82
+ BA: { name: "Boeing Co.", sector: "Aerospace and Defense" },
83
+ CAT: { name: "Caterpillar Inc.", sector: "Construction Machinery" },
84
+ DE: { name: "Deere and Co.", sector: "Agricultural Machinery" },
85
+ // Commonly-confused tickers (the bug from prior critique)
86
+ DY: { name: "Dycom Industries Inc.", sector: "Telecom Construction" },
87
+ APH: { name: "Amphenol Corp.", sector: "Electronic Components" },
88
+ CIEN: { name: "Ciena Corp.", sector: "Optical Networking" },
89
+ GRMN: { name: "Garmin Ltd.", sector: "GPS Devices" },
90
+ HUT: { name: "Hut 8 Corp.", sector: "Bitcoin Mining" },
91
+ // ETFs
92
+ SPY: { name: "SPDR S and P 500 ETF Trust", sector: "ETF (S and P 500)" },
93
+ QQQ: { name: "Invesco QQQ Trust", sector: "ETF (Nasdaq-100)" },
94
+ IWM: { name: "iShares Russell 2000 ETF", sector: "ETF (Small Caps)" },
95
+ DIA: { name: "SPDR Dow Jones Industrial Average ETF", sector: "ETF (Dow)" },
96
+ VTI: { name: "Vanguard Total Stock Market ETF", sector: "ETF (Total Market)" },
97
+ };