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.
- package/diagnostics.mjs +141 -0
- package/dist/compute.worker-j5ahIpF-.js +1 -0
- package/dist/graph.worker-DG6iGCB9.js +1 -0
- package/dist/index.html +2314 -0
- package/flatten-guide.md +248 -0
- package/index.html +12 -0
- package/package.json +38 -0
- package/src/App.orig.tsx +204 -0
- package/src/App.orig1.tsx +27 -0
- package/src/App.orig2.tsx +25 -0
- package/src/App.tsx +3 -0
- package/src/BaseApp.tsx +18 -0
- package/src/INTEGRATION_LEDGER.md +22 -0
- package/src/PERSIST_CANARY.orig.txt +1 -0
- package/src/PERSIST_CANARY.txt +1 -0
- package/src/REGRESSION_LEDGER.md +651 -0
- package/src/TEMPLATE_PIPELINE_AUDIT.md +208 -0
- package/src/WILLIAMS_PERSONA_GUIDE.md +62 -0
- package/src/chat/VeritasChat.tsx +69 -0
- package/src/chat/synthesis.ts +31 -0
- package/src/chat/tier.ts +45 -0
- package/src/components/AdaptersPage.orig.tsx +99 -0
- package/src/components/AdaptersPage.tsx +3 -0
- package/src/components/AdversarialPanel.tsx +136 -0
- package/src/components/AnchorBaselinePanel.tsx +75 -0
- package/src/components/AnswerPanel.tsx +60 -0
- package/src/components/ArtifactPanel.tsx +43 -0
- package/src/components/ChatApp.orig.tsx +1582 -0
- package/src/components/ChatApp.orig1.tsx +722 -0
- package/src/components/ChatApp.tsx +95 -0
- package/src/components/ChatAugmentPanels.tsx +73 -0
- package/src/components/CitationLedgerPanel.tsx +313 -0
- package/src/components/ComputeSandboxPanel.tsx +130 -0
- package/src/components/ConfigPanel.tsx +110 -0
- package/src/components/ControlPlanePage.tsx +195 -0
- package/src/components/CreativeTreeLifePage.tsx +234 -0
- package/src/components/CreativeTreeOfLifePanel.tsx +149 -0
- package/src/components/DebugTracePanel.tsx +137 -0
- package/src/components/DeepReasoningTrace.tsx +48 -0
- package/src/components/EntitySheetPanel.tsx +51 -0
- package/src/components/FailureModesPanel.tsx +104 -0
- package/src/components/GBSDashboard.tsx +239 -0
- package/src/components/GraphView.tsx +116 -0
- package/src/components/HUD.tsx +125 -0
- package/src/components/HypothesisPanel.tsx +67 -0
- package/src/components/InnovationGenomeEngine.tsx +792 -0
- package/src/components/InnovationPersonaGuide.tsx +348 -0
- package/src/components/InnovationPersonaPanel.tsx +289 -0
- package/src/components/LiveResourceHUD.tsx +109 -0
- package/src/components/LongWriterPanel.tsx +112 -0
- package/src/components/MainPipelineV10Bridge.tsx +72 -0
- package/src/components/MarkdownLite.tsx +63 -0
- package/src/components/MemoryInspector.tsx +38 -0
- package/src/components/MemoryMonitor.tsx +52 -0
- package/src/components/MemoryStressPanel.tsx +176 -0
- package/src/components/ModulesPage.tsx +171 -0
- package/src/components/PipelineDebugConsole.orig.tsx +1856 -0
- package/src/components/PipelineDebugConsole.tsx +3 -0
- package/src/components/PreFlightHUD.tsx +67 -0
- package/src/components/PrismaFetchTracePanel.tsx +87 -0
- package/src/components/ReportOSPanel.tsx +165 -0
- package/src/components/ResourceEstimatorPage.tsx +327 -0
- package/src/components/RichText.tsx +181 -0
- package/src/components/SagaOsPanel.tsx +605 -0
- package/src/components/SagaOsReference.tsx +421 -0
- package/src/components/SagaOsV2Panel.tsx +594 -0
- package/src/components/SagaStyleTab.tsx +382 -0
- package/src/components/SageBlueprintPanel.tsx +416 -0
- package/src/components/SharedChatInput.tsx +77 -0
- package/src/components/StatFinancePanel.tsx +190 -0
- package/src/components/StylePersonaPanel.tsx +128 -0
- package/src/components/TemplatesPage.tsx +300 -0
- package/src/components/TestPanel.tsx +63 -0
- package/src/components/TraceLog.tsx +89 -0
- package/src/components/V15CalibrationAugment.tsx +1134 -0
- package/src/components/V15CalibrationDialog.tsx +1871 -0
- package/src/components/V15Overlay.orig.tsx +120 -0
- package/src/components/V15Overlay.tsx +4 -0
- package/src/components/V15OverlayWrapper.tsx +362 -0
- package/src/components/V15Toggle.tsx +34 -0
- package/src/console/DiagnosticRecoveryPanel.tsx +358 -0
- package/src/console/EngineeringConsole.tsx +103 -0
- package/src/console/FictionSystemPanels.tsx +882 -0
- package/src/console/InspectorPanels.tsx +254 -0
- package/src/console/ManuscriptGraderPanel.tsx +182 -0
- package/src/console/RecursiveReviserPanel.tsx +245 -0
- package/src/console/SeedControlPanel.tsx +135 -0
- package/src/console/StoryControllerPanel.tsx +443 -0
- package/src/console/engineBridge.ts +258 -0
- package/src/console/gemini.ts +106 -0
- package/src/console/grading.ts +250 -0
- package/src/console/util.ts +45 -0
- package/src/fiction/continuity.ts +372 -0
- package/src/fiction/crash-protection.ts +111 -0
- package/src/fiction/diagnostics.ts +208 -0
- package/src/fiction/diff.ts +74 -0
- package/src/fiction/entity-state-machine.ts +214 -0
- package/src/fiction/nive-engine.ts +404 -0
- package/src/fiction/pipeline-selftest.ts +132 -0
- package/src/fiction/seed-control.ts +193 -0
- package/src/fiction/story-engine.ts +326 -0
- package/src/fiction/types.ts +68 -0
- package/src/flatten-guide.md +379 -0
- package/src/index.css +14 -0
- package/src/index.orig.css +13 -0
- package/src/lib/academic-sources.base.ts +188 -0
- package/src/lib/academic-sources.orig.ts +28 -0
- package/src/lib/academic-sources.ts +10 -0
- package/src/lib/advanced-math.ts +119 -0
- package/src/lib/adversarial-engine.base.ts +409 -0
- package/src/lib/adversarial-engine.ts +82 -0
- package/src/lib/ai-revision.ts +623 -0
- package/src/lib/app-state.tsx +426 -0
- package/src/lib/artifact-registry.ts +97 -0
- package/src/lib/artifacts.ts +180 -0
- package/src/lib/atlas-dr.ts +167 -0
- package/src/lib/browser-mtls.ts +127 -0
- package/src/lib/browser-queue.ts +221 -0
- package/src/lib/browser-search-scraper.base.ts +382 -0
- package/src/lib/browser-search-scraper.orig.ts +90 -0
- package/src/lib/browser-search-scraper.ts +10 -0
- package/src/lib/calc-interceptor.ts +82 -0
- package/src/lib/citation-lane-tap.ts +78 -0
- package/src/lib/citation-ledger-store.ts +369 -0
- package/src/lib/citation-ledger.ts +203 -0
- package/src/lib/compute-sandbox.ts +215 -0
- package/src/lib/compute.worker.ts +153 -0
- package/src/lib/connectors/gemini.ts +120 -0
- package/src/lib/connectors/jina.ts +233 -0
- package/src/lib/connectors/marketdata.ts +51 -0
- package/src/lib/connectors/prismafetch.base.ts +175 -0
- package/src/lib/connectors/prismafetch.ts +1 -0
- package/src/lib/connectors/serpapi.ts +65 -0
- package/src/lib/connectors/wikidata.ts +44 -0
- package/src/lib/constraints.ts +331 -0
- package/src/lib/continuation-detector.base.ts +153 -0
- package/src/lib/continuation-detector.ts +48 -0
- package/src/lib/contradraft.ts +168 -0
- package/src/lib/cors-proxy.ts +120 -0
- package/src/lib/coverage.ts +81 -0
- package/src/lib/debug/architecture-prescription.ts +556 -0
- package/src/lib/debug/covea-repair.ts +543 -0
- package/src/lib/debug/helios-ground.ts +319 -0
- package/src/lib/debug/intent-decomposer.ts +281 -0
- package/src/lib/debug/intent-lattice.ts +349 -0
- package/src/lib/debug/pipeline-diagnosis.ts +1149 -0
- package/src/lib/debug/pipeline-trace-bus.ts +424 -0
- package/src/lib/debug/prompt-forge.ts +678 -0
- package/src/lib/debug/repair-sites.ts +513 -0
- package/src/lib/debug/research-phase.ts +266 -0
- package/src/lib/debug/retrieval-context.ts +76 -0
- package/src/lib/debug/retrieval-hardener.ts +142 -0
- package/src/lib/debug/scraper-debug-runner.ts +576 -0
- package/src/lib/debug/scraper-forensics.ts +418 -0
- package/src/lib/debug/scraper-lane-roadmap.ts +136 -0
- package/src/lib/debug/self-test.ts +415 -0
- package/src/lib/debug/step-attribution.ts +211 -0
- package/src/lib/debug/template-rubric.ts +301 -0
- package/src/lib/debug/unified-innovation.ts +126 -0
- package/src/lib/debug/veritas-hybrid-scraper.ts +335 -0
- package/src/lib/defense-registry.ts +104 -0
- package/src/lib/defenses.ts +162 -0
- package/src/lib/deterministic-citation-ledger.ts +174 -0
- package/src/lib/elo-registry.base.ts +117 -0
- package/src/lib/elo-registry.ts +1 -0
- package/src/lib/entity-resolver.ts +291 -0
- package/src/lib/failure-modes.ts +267 -0
- package/src/lib/feature-registry.ts +69 -0
- package/src/lib/flaw-registry.ts +143 -0
- package/src/lib/flaws/_template.ts +52 -0
- package/src/lib/flaws/builtins.ts +63 -0
- package/src/lib/flaws/finance.ts +169 -0
- package/src/lib/flaws/fixers.ts +10 -0
- package/src/lib/flaws/index.ts +32 -0
- package/src/lib/flaws/legal.ts +157 -0
- package/src/lib/flaws/medical.ts +188 -0
- package/src/lib/flaws/original-defenses-pack.ts +81 -0
- package/src/lib/flaws/sample-declarative-pack.json +38 -0
- package/src/lib/flaws/selftest.ts +201 -0
- package/src/lib/flaws/software-extended.ts +125 -0
- package/src/lib/flaws/software-rn-webgl.ts +182 -0
- package/src/lib/flaws/statistics-advanced.ts +46 -0
- package/src/lib/flaws/statistics.ts +61 -0
- package/src/lib/gbse/config.ts +20 -0
- package/src/lib/gbse/engine.ts +226 -0
- package/src/lib/gbse/graph.ts +118 -0
- package/src/lib/gbse/graph.worker.ts +21 -0
- package/src/lib/gbse/tests.ts +117 -0
- package/src/lib/gbse/tiers.ts +65 -0
- package/src/lib/gbse/types.ts +94 -0
- package/src/lib/innovation-genome-engine-v2.orig.ts +1001 -0
- package/src/lib/innovation-genome-engine-v2.ts +3 -0
- package/src/lib/innovation-genome-engine.orig.ts +330 -0
- package/src/lib/innovation-genome-engine.ts +3 -0
- package/src/lib/innovation-genome-v10.orig.ts +314 -0
- package/src/lib/innovation-genome-v10.ts +2 -0
- package/src/lib/innovation-genome-v3.orig.ts +2015 -0
- package/src/lib/innovation-genome-v3.ts +2 -0
- package/src/lib/innovation-genome-v4.orig.ts +1959 -0
- package/src/lib/innovation-genome-v4.ts +2 -0
- package/src/lib/innovation-genome-v5.orig.ts +1210 -0
- package/src/lib/innovation-genome-v5.ts +2 -0
- package/src/lib/innovation-genome-v7.orig.ts +2549 -0
- package/src/lib/innovation-genome-v7.ts +2 -0
- package/src/lib/innovation-genome-v8.orig.ts +1485 -0
- package/src/lib/innovation-genome-v8.ts +2 -0
- package/src/lib/innovation-genome-v9.orig.ts +643 -0
- package/src/lib/innovation-genome-v9.ts +2 -0
- package/src/lib/jina.base.ts +293 -0
- package/src/lib/jina.ts +1 -0
- package/src/lib/live-telemetry.ts +61 -0
- package/src/lib/longwriter.ts +84 -0
- package/src/lib/manuscript-grade-v2.ts +298 -0
- package/src/lib/memory-governor.ts +173 -0
- package/src/lib/memory-stress-tests.ts +248 -0
- package/src/lib/model-intelligence.ts +48 -0
- package/src/lib/model-rotator.ts +75 -0
- package/src/lib/models.orig.ts +513 -0
- package/src/lib/models.ts +151 -0
- package/src/lib/n-deep.base.ts +592 -0
- package/src/lib/n-deep.ts +51 -0
- package/src/lib/nih-simulator.ts +56 -0
- package/src/lib/nih-vulnerability-fixes.ts +460 -0
- package/src/lib/omega-templates.base.ts +294 -0
- package/src/lib/omega-templates.ts +225 -0
- package/src/lib/omni-nexus.ts +64 -0
- package/src/lib/oracle-adapters.ts +67 -0
- package/src/lib/oracle-registry.ts +163 -0
- package/src/lib/orchestrator.ts +357 -0
- package/src/lib/output-boundary.ts +235 -0
- package/src/lib/overrides/vite-native-chaos-harness.ts +154 -0
- package/src/lib/overrides/vite-native-contract-plane.ts +245 -0
- package/src/lib/overrides/vite-native-doctor-plane.ts +208 -0
- package/src/lib/overrides/vite-native-knowledge-store.ts +267 -0
- package/src/lib/overrides/vite-native-policy-plane.ts +190 -0
- package/src/lib/overrides/vite-native-replay-plane.ts +197 -0
- package/src/lib/overrides/vite-native-runtime-plane.ts +106 -0
- package/src/lib/overrides/vite-native-scraper.ts +848 -0
- package/src/lib/overrides/vite-native-selftest-functional.ts +217 -0
- package/src/lib/overrides/vite-native-selftest.ts +183 -0
- package/src/lib/overrides/vite-native-snapshot-plane.ts +123 -0
- package/src/lib/philosophy-toolkit.ts +75 -0
- package/src/lib/pipeline.orig.ts +659 -0
- package/src/lib/pipeline.ts +42 -0
- package/src/lib/precache.ts +128 -0
- package/src/lib/py-sandbox.ts +205 -0
- package/src/lib/quality-score.ts +96 -0
- package/src/lib/quant-engine.ts +231 -0
- package/src/lib/quant-lib.ts +80 -0
- package/src/lib/reportos.ts +175 -0
- package/src/lib/research-os.ts +306 -0
- package/src/lib/resource-estimator.ts +114 -0
- package/src/lib/rpm-governor.ts +93 -0
- package/src/lib/runtime-estimator.ts +135 -0
- package/src/lib/sage/empty-space-v6.ts +560 -0
- package/src/lib/sage/empty-space-v7.ts +222 -0
- package/src/lib/sage/empty-space.ts +733 -0
- package/src/lib/sage/engine.ts +786 -0
- package/src/lib/sage/index.ts +17 -0
- package/src/lib/sage/judge.ts +246 -0
- package/src/lib/sage/prng.ts +53 -0
- package/src/lib/sage/reality-grounding.ts +380 -0
- package/src/lib/sage/repetition.ts +151 -0
- package/src/lib/sage/saga-os-v2-engines.ts +1870 -0
- package/src/lib/sage/saga-os-v2.ts +274 -0
- package/src/lib/sage/saga-os-v3-core.ts +1491 -0
- package/src/lib/sage/saga-os-v3-release.ts +739 -0
- package/src/lib/sage/saga-os-v4-aureate.ts +1161 -0
- package/src/lib/sage/saga-os-v4.ts +212 -0
- package/src/lib/sage/saga-os-v5.ts +205 -0
- package/src/lib/sage/saga-os-v6.ts +346 -0
- package/src/lib/sage/saga-os-v7.ts +314 -0
- package/src/lib/sage/saga-os-v8.ts +505 -0
- package/src/lib/sage/saga-os.ts +329 -0
- package/src/lib/sage/taxonomy.ts +403 -0
- package/src/lib/sage/unified-roll.ts +524 -0
- package/src/lib/sage/worked-sketches.ts +44 -0
- package/src/lib/sage.ts +166 -0
- package/src/lib/scraper-debug-bus.ts +53 -0
- package/src/lib/scraper-enhanced.orig.ts +153 -0
- package/src/lib/scraper-enhanced.ts +10 -0
- package/src/lib/scraper-hardener.base.orig.ts +155 -0
- package/src/lib/scraper-hardener.base.ts +317 -0
- package/src/lib/scraper-hardener.ts +1 -0
- package/src/lib/scraper-palisade/palisade-adjudicator.orig.ts +419 -0
- package/src/lib/scraper-palisade/palisade-adjudicator.ts +13 -0
- package/src/lib/scraper-vnext/arbiter-omega.orig.ts +688 -0
- package/src/lib/scraper-vnext/arbiter-omega.ts +13 -0
- package/src/lib/scraper-vnext/canonical-portfolio-augments.ts +479 -0
- package/src/lib/scraper-vnext/canonical-portfolio-orchestrator.orig.ts +1529 -0
- package/src/lib/scraper-vnext/canonical-portfolio-orchestrator.ts +13 -0
- package/src/lib/scraper-vnext/conclave-omega.ts +1830 -0
- package/src/lib/scraper-vnext/content-extractor-v2.ts +226 -0
- package/src/lib/scraper-vnext/diagnostics-suite.ts +36 -0
- package/src/lib/scraper-vnext/epistemic-packer.ts +97 -0
- package/src/lib/scraper-vnext/fusion-v2.ts +65 -0
- package/src/lib/scraper-vnext/hydra-reader.orig.ts +1216 -0
- package/src/lib/scraper-vnext/hydra-reader.ts +13 -0
- package/src/lib/scraper-vnext/native-scraper-browser-vnext.orig.ts +91 -0
- package/src/lib/scraper-vnext/native-scraper-browser-vnext.ts +13 -0
- package/src/lib/scraper-vnext/nexus-consensus.orig.ts +905 -0
- package/src/lib/scraper-vnext/nexus-consensus.ts +13 -0
- package/src/lib/scraper-vnext/portfolio-consensus-adjudicator.ts +804 -0
- package/src/lib/scraper-vnext/portfolio-consensus-memory.ts +377 -0
- package/src/lib/scraper-vnext/portfolio-terminal-governor.ts +548 -0
- package/src/lib/scraper-vnext/query-strategist.orig.ts +224 -0
- package/src/lib/scraper-vnext/query-strategist.ts +423 -0
- package/src/lib/scraper-vnext/retrieval-accelerator.ts +708 -0
- package/src/lib/scraper-vnext/retrieval-audit-augments.ts +477 -0
- package/src/lib/scraper-vnext/retrieval-control-plane.ts +904 -0
- package/src/lib/scraper-vnext/retrieval-policy-augments.ts +358 -0
- package/src/lib/scraper-vnext/safe-fetch-v2.ts +157 -0
- package/src/lib/scraper-vnext/sentinel-omega.ts +56 -0
- package/src/lib/scraper-vnext/sentinel-orchestrator.ts +69 -0
- package/src/lib/scraper-vnext/sibyl-oracle.orig.ts +413 -0
- package/src/lib/scraper-vnext/sibyl-oracle.ts +13 -0
- package/src/lib/scraper-vnext/smart-read-v2.ts +55 -0
- package/src/lib/scraper-vnext/spa-rescue-bridge.ts +608 -0
- package/src/lib/scraper-vnext/strata-engine.orig.ts +2666 -0
- package/src/lib/scraper-vnext/strata-engine.ts +13 -0
- package/src/lib/scraper-vnext/structured-source-adapter.orig.ts +369 -0
- package/src/lib/scraper-vnext/structured-source-adapter.ts +34 -0
- package/src/lib/scraper-vnext/terminal-complete.ts +224 -0
- package/src/lib/scraper-vnext/terminal-final.ts +277 -0
- package/src/lib/scraper-vnext/terminal-saturation.ts +345 -0
- package/src/lib/scraper-vnext/terminal-wire.ts +425 -0
- package/src/lib/scraper-vnext/vanguard-titanium.orig.ts +467 -0
- package/src/lib/scraper-vnext/vanguard-titanium.ts +17 -0
- package/src/lib/search-cache.ts +138 -0
- package/src/lib/sloop-runner.base.ts +223 -0
- package/src/lib/sloop-runner.ts +104 -0
- package/src/lib/sloop.ts +114 -0
- package/src/lib/small-model-adapters.ts +82 -0
- package/src/lib/sscp.ts +86 -0
- package/src/lib/system-map.ts +54 -0
- package/src/lib/uni-node.ts +86 -0
- package/src/lib/universal-rigor-guard.ts +433 -0
- package/src/lib/v15-gate-testbed.ts +274 -0
- package/src/lib/v15-gemini.base.ts +89 -0
- package/src/lib/v15-gemini.ts +1 -0
- package/src/lib/v15-grounding.orig.ts +241 -0
- package/src/lib/v15-grounding.ts +79 -0
- package/src/lib/v15-pipeline.base.ts +769 -0
- package/src/lib/v15-pipeline.orig.ts +1154 -0
- package/src/lib/v15-pipeline.ts +674 -0
- package/src/lib/v15-questions.ts +64 -0
- package/src/lib/v15-rate-limiter.orig.ts +91 -0
- package/src/lib/v15-rate-limiter.ts +48 -0
- package/src/lib/v15-state.base.ts +87 -0
- package/src/lib/v15-state.ts +28 -0
- package/src/lib/visual-table-generator.tsx +207 -0
- package/src/lib/wasm-runtime.ts +133 -0
- package/src/lib/williams-persona-guide.ts +265 -0
- package/src/lib/williams-style.base.ts +464 -0
- package/src/lib/williams-style.ts +59 -0
- package/src/lib/worker-pool.ts +96 -0
- package/src/lib/writing-tiers.ts +125 -0
- package/src/main.orig.tsx +10 -0
- package/src/main.tsx +10 -0
- package/src/utils/cn.orig.ts +6 -0
- package/src/utils/cn.ts +6 -0
- package/src/vite-env.d.ts +1 -0
- package/tsconfig.json +31 -0
- package/unify.mjs +537 -0
- package/vite.config.ts +18 -0
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { useState } from "react";
|
|
2
|
+
import { useAppState } from "../lib/app-state";
|
|
3
|
+
import { TIERS } from "../lib/gbse/tiers";
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Pre-flight Resource HUD
|
|
7
|
+
* Shows the estimated cost and coverage before the run begins.
|
|
8
|
+
* Red-team requirement: "totally additive and not replace any items that are currently working."
|
|
9
|
+
*/
|
|
10
|
+
export function PreFlightHUD() {
|
|
11
|
+
const { input, settings, model } = useAppState();
|
|
12
|
+
const [tier, setTier] = useState(3);
|
|
13
|
+
|
|
14
|
+
// Calculate estimate using logic from research doc
|
|
15
|
+
const spec = TIERS[tier];
|
|
16
|
+
|
|
17
|
+
return (
|
|
18
|
+
<div className="rounded-2xl border border-indigo-200 bg-white p-5 shadow-sm">
|
|
19
|
+
<div className="flex items-center justify-between mb-4">
|
|
20
|
+
<div>
|
|
21
|
+
<div className="text-[10px] font-bold uppercase tracking-[0.2em] text-indigo-600">Resource HUD · Pre-Flight</div>
|
|
22
|
+
<h2 className="text-lg font-bold text-zinc-900">T{tier} {spec.name}</h2>
|
|
23
|
+
</div>
|
|
24
|
+
<div className="flex items-center gap-2">
|
|
25
|
+
<select
|
|
26
|
+
value={tier}
|
|
27
|
+
onChange={(e) => setTier(Number(e.target.value))}
|
|
28
|
+
className="rounded-lg border border-zinc-300 bg-zinc-50 px-2 py-1 text-xs font-semibold focus:outline-none focus:border-indigo-500"
|
|
29
|
+
>
|
|
30
|
+
{Object.values(TIERS).map(t => (
|
|
31
|
+
<option key={t.tier} value={t.tier}>Tier {t.tier}</option>
|
|
32
|
+
))}
|
|
33
|
+
</select>
|
|
34
|
+
</div>
|
|
35
|
+
</div>
|
|
36
|
+
|
|
37
|
+
<div className="grid grid-cols-2 gap-4 md:grid-cols-4">
|
|
38
|
+
<div className="rounded-xl border border-zinc-100 bg-zinc-50 p-3">
|
|
39
|
+
<div className="text-[10px] font-bold uppercase tracking-wider text-zinc-400 mb-1">Time (Est)</div>
|
|
40
|
+
<div className="text-lg font-mono font-bold text-zinc-900">{spec.maxSeconds}s</div>
|
|
41
|
+
</div>
|
|
42
|
+
<div className="rounded-xl border border-zinc-100 bg-zinc-50 p-3">
|
|
43
|
+
<div className="text-[10px] font-bold uppercase tracking-wider text-zinc-400 mb-1">Token Cap</div>
|
|
44
|
+
<div className="text-lg font-mono font-bold text-zinc-900">{(spec.maxTokens / 1000).toFixed(0)}K</div>
|
|
45
|
+
</div>
|
|
46
|
+
<div className="rounded-xl border border-zinc-100 bg-zinc-50 p-3">
|
|
47
|
+
<div className="text-[10px] font-bold uppercase tracking-wider text-zinc-400 mb-1">Probes</div>
|
|
48
|
+
<div className="text-lg font-mono font-bold text-zinc-900">{spec.evidenceProbes}</div>
|
|
49
|
+
</div>
|
|
50
|
+
<div className="rounded-xl border border-zinc-100 bg-zinc-50 p-3">
|
|
51
|
+
<div className="text-[10px] font-bold uppercase tracking-wider text-zinc-400 mb-1">Coverage</div>
|
|
52
|
+
<div className="text-lg font-mono font-bold text-emerald-600">{(spec.forecastCoverage * 100).toFixed(1)}%</div>
|
|
53
|
+
</div>
|
|
54
|
+
</div>
|
|
55
|
+
|
|
56
|
+
<div className="mt-4 pt-4 border-t border-zinc-100 flex items-center justify-between text-[11px] text-zinc-500">
|
|
57
|
+
<div className="flex items-center gap-4">
|
|
58
|
+
<span>Driver: <span className="font-mono text-zinc-700">{model}</span></span>
|
|
59
|
+
<span>4-Stage: <span className={settings.deepResearch ? "text-indigo-600 font-bold" : ""}>{settings.deepResearch ? "ON" : "OFF"}</span></span>
|
|
60
|
+
</div>
|
|
61
|
+
<div className="font-mono italic truncate max-w-[200px]">
|
|
62
|
+
{input.slice(0, 40)}{input.length > 40 ? "..." : ""}
|
|
63
|
+
</div>
|
|
64
|
+
</div>
|
|
65
|
+
</div>
|
|
66
|
+
);
|
|
67
|
+
}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { useState } from "react";
|
|
2
|
+
import { useAppState } from "../lib/app-state";
|
|
3
|
+
import { prismaFetchHealth, prismaFetchSearch, prismaFetchRead, getPrismaFetchReadOptionsFromSettings, type PrismaFetchReadMode } from "../lib/connectors/prismafetch";
|
|
4
|
+
|
|
5
|
+
export function PrismaFetchTracePanel() {
|
|
6
|
+
const { settings, setSetting, pushDebugEvent } = useAppState();
|
|
7
|
+
const [health, setHealth] = useState<string>("unknown");
|
|
8
|
+
const [searchResults, setSearchResults] = useState<any[]>([]);
|
|
9
|
+
const [readResult, setReadResult] = useState<any>(null);
|
|
10
|
+
const [busy, setBusy] = useState(false);
|
|
11
|
+
|
|
12
|
+
const mode = (settings.prismafetchReadMode || "auto") as PrismaFetchReadMode;
|
|
13
|
+
|
|
14
|
+
async function checkHealth() {
|
|
15
|
+
setBusy(true);
|
|
16
|
+
const ok = await prismaFetchHealth();
|
|
17
|
+
setHealth(ok ? "ok" : "down");
|
|
18
|
+
setBusy(false);
|
|
19
|
+
pushDebugEvent(`[PrismaFetch] health = ${ok ? "ok" : "down"}`);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
async function runSearch() {
|
|
23
|
+
setBusy(true);
|
|
24
|
+
try {
|
|
25
|
+
const { results } = await prismaFetchSearch("NIH social determinants funding 2024");
|
|
26
|
+
setSearchResults(results.slice(0, 5));
|
|
27
|
+
pushDebugEvent(`[PrismaFetch] search returned ${results.length} results`);
|
|
28
|
+
} catch (e: any) {
|
|
29
|
+
pushDebugEvent(`[PrismaFetch] search error: ${e.message}`);
|
|
30
|
+
}
|
|
31
|
+
setBusy(false);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
async function runRead() {
|
|
35
|
+
setBusy(true);
|
|
36
|
+
try {
|
|
37
|
+
const opts = getPrismaFetchReadOptionsFromSettings({
|
|
38
|
+
prismafetchReadMode: settings.prismafetchReadMode,
|
|
39
|
+
prismafetchOcr: settings.prismafetchOcr,
|
|
40
|
+
});
|
|
41
|
+
const r = await prismaFetchRead("https://grants.nih.gov", opts);
|
|
42
|
+
setReadResult(r);
|
|
43
|
+
pushDebugEvent(`[PrismaFetch] read ${r.markdown.length} chars (mode=${opts.mode})`);
|
|
44
|
+
} catch (e: any) {
|
|
45
|
+
pushDebugEvent(`[PrismaFetch] read error: ${e.message}`);
|
|
46
|
+
}
|
|
47
|
+
setBusy(false);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
return (
|
|
51
|
+
<div className="rounded-2xl border border-zinc-200 bg-white p-5 shadow-sm space-y-4">
|
|
52
|
+
<div className="text-sm font-bold">PrismaFetch RC10 Tester — health, search, read</div>
|
|
53
|
+
|
|
54
|
+
<div className="flex gap-2 text-xs">
|
|
55
|
+
<button onClick={checkHealth} disabled={busy} className="rounded bg-zinc-900 px-3 py-1 text-white">Health</button>
|
|
56
|
+
<button onClick={runSearch} disabled={busy} className="rounded border px-3 py-1">Search test</button>
|
|
57
|
+
<button onClick={runRead} disabled={busy} className="rounded border px-3 py-1">Read test</button>
|
|
58
|
+
</div>
|
|
59
|
+
|
|
60
|
+
<div className="text-xs font-mono">Server: {settings.prismafetchUrl} — status: {health}</div>
|
|
61
|
+
|
|
62
|
+
<div className="text-xs">
|
|
63
|
+
Read mode:
|
|
64
|
+
<select className="ml-2 border px-2 py-0.5" value={mode}
|
|
65
|
+
onChange={e => setSetting("prismafetchReadMode", e.target.value as PrismaFetchReadMode)}>
|
|
66
|
+
{["auto", "fast_static", "render_headless", "visual_only"].map(m => <option key={m} value={m}>{m}</option>)}
|
|
67
|
+
</select>
|
|
68
|
+
<label className="ml-3 inline-flex items-center gap-1">
|
|
69
|
+
<input type="checkbox" checked={!!settings.prismafetchOcr} onChange={e => setSetting("prismafetchOcr", e.target.checked)} />
|
|
70
|
+
OCR
|
|
71
|
+
</label>
|
|
72
|
+
</div>
|
|
73
|
+
|
|
74
|
+
{searchResults.length > 0 && (
|
|
75
|
+
<div className="text-xs bg-zinc-50 p-2 border rounded">
|
|
76
|
+
{searchResults.map((r, i) => <div key={i}>• {r.title} — {r.url}</div>)}
|
|
77
|
+
</div>
|
|
78
|
+
)}
|
|
79
|
+
|
|
80
|
+
{readResult && (
|
|
81
|
+
<div className="text-xs bg-zinc-50 p-2 border rounded font-mono max-h-40 overflow-auto">
|
|
82
|
+
{readResult.markdown.slice(0, 800)}
|
|
83
|
+
</div>
|
|
84
|
+
)}
|
|
85
|
+
</div>
|
|
86
|
+
);
|
|
87
|
+
}
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
import { useState } from "react";
|
|
2
|
+
import {
|
|
3
|
+
calcMarketSizing, calcCAGR, calcNPV, calcIRR, calcMOIC, calcAdjEBITDA,
|
|
4
|
+
calcExpectedValue, calcRisk, calcResidualRisk, calcGHG, calcCarbonIntensity,
|
|
5
|
+
calcAIReadiness, calcLCOE, calcConfidence,
|
|
6
|
+
QUALITY_GATES, routeArchetype, findArchetype,
|
|
7
|
+
type QuantResult as CalcResult,
|
|
8
|
+
} from "../lib/reportos";
|
|
9
|
+
import * as Quant from "../lib/quant-lib";
|
|
10
|
+
import { useAppState } from "../lib/app-state";
|
|
11
|
+
|
|
12
|
+
type Engine = "market" | "valuation" | "risk" | "esg" | "ai" | "energy" | "confidence" | "unit_economics";
|
|
13
|
+
|
|
14
|
+
function ResultRow({ r }: { r: CalcResult }) {
|
|
15
|
+
return (
|
|
16
|
+
<div className="flex items-center justify-between rounded-lg border border-zinc-100 bg-zinc-50 px-3 py-2">
|
|
17
|
+
<div>
|
|
18
|
+
<div className="text-xs font-bold text-zinc-900">{r.label}</div>
|
|
19
|
+
<div className="font-mono text-[10px] text-zinc-500">{r.formula}</div>
|
|
20
|
+
</div>
|
|
21
|
+
<div className="font-mono text-sm font-bold text-indigo-700">
|
|
22
|
+
{r.unit === "$" ? "$" : ""}{Number.isFinite(r.value) ? (Math.abs(r.value) >= 1000 ? r.value.toLocaleString(undefined, { maximumFractionDigits: 0 }) : (r.unit === "%" ? (r.value * 100).toFixed(1) : r.value.toFixed(2))) : "—"}{r.unit && r.unit !== "$" ? ` ${r.unit}` : ""}
|
|
23
|
+
</div>
|
|
24
|
+
</div>
|
|
25
|
+
);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export function ReportOSPanel() {
|
|
29
|
+
const { input } = useAppState();
|
|
30
|
+
const [engine, setEngine] = useState<Engine>("valuation");
|
|
31
|
+
const archId = routeArchetype(input || "strategy");
|
|
32
|
+
const arch = findArchetype(archId);
|
|
33
|
+
|
|
34
|
+
// Engine inputs (real, editable)
|
|
35
|
+
const [m, setM] = useState({ customers: 50000, spendPerCustomer: 1200, servedShare: 0.4, captureRate: 0.15, begin: 100, end: 180, years: 5 });
|
|
36
|
+
const [v, setV] = useState({ initial: 1000000, cf: "300000,350000,400000,450000,500000", rate: 0.12, exit: 4500000, invested: 1000000, reported: 800000, nrExp: 50000, nrInc: 20000, runRate: 30000 });
|
|
37
|
+
const [r, setR] = useState({ p: 0.4, impact: 8, inherent: 16, control: 0.6 });
|
|
38
|
+
const [e, setE] = useState({ s1: 1200, s2: 3400, s3: 18000, revenue: 5000000 });
|
|
39
|
+
const [a, setA] = useState({ dataQuality: 70, infra: 60, talent: 55, governance: 50, process: 65, change: 45 });
|
|
40
|
+
const [en, setEn] = useState({ pvCost: 120000000, pvEnergy: 2000000 });
|
|
41
|
+
const [c, setC] = useState({ evidence: 82, method: 75, assumption: 68 });
|
|
42
|
+
const [ue, setUe] = useState({ smSpend: 500000, newCust: 200, arpu: 50, margin: 0.7, churn: 0.05 });
|
|
43
|
+
|
|
44
|
+
const cf = v.cf.split(",").map(Number).filter(n => Number.isFinite(n));
|
|
45
|
+
|
|
46
|
+
let results: CalcResult[] = [];
|
|
47
|
+
if (engine === "market") results = [...calcMarketSizing(m), calcCAGR(m.begin, m.end, m.years)];
|
|
48
|
+
else if (engine === "valuation") results = [calcNPV(cf, v.rate, v.initial), calcIRR(cf, v.initial), calcMOIC(v.exit, v.invested), calcAdjEBITDA({ reportedEBITDA: v.reported, nonRecurringExp: v.nrExp, nonRecurringInc: v.nrInc, runRateAdj: v.runRate }), calcExpectedValue([{ p: 0.3, value: cf[0] ?? 0 }, { p: 0.5, value: cf[cf.length - 1] ?? 0 }, { p: 0.2, value: 0 }])];
|
|
49
|
+
else if (engine === "risk") results = [calcRisk(r.p, r.impact), calcResidualRisk(r.inherent, r.control)];
|
|
50
|
+
else if (engine === "esg") results = [calcGHG(e.s1, e.s2, e.s3), calcCarbonIntensity(e.s1 + e.s2 + e.s3, e.revenue)];
|
|
51
|
+
else if (engine === "ai") results = [calcAIReadiness(a)];
|
|
52
|
+
else if (engine === "energy") results = [calcLCOE(en.pvCost, en.pvEnergy)];
|
|
53
|
+
else if (engine === "confidence") results = [calcConfidence(c.evidence, c.method, c.assumption)];
|
|
54
|
+
else if (engine === "unit_economics") results = [
|
|
55
|
+
Quant.calcCAC(ue.smSpend, ue.newCust),
|
|
56
|
+
Quant.calcLTV(ue.arpu, ue.margin, ue.churn),
|
|
57
|
+
Quant.calcRuleOf40(40, 15),
|
|
58
|
+
Quant.calcRunway(1500000, 200000)
|
|
59
|
+
];
|
|
60
|
+
|
|
61
|
+
function num(val: number, set: (n: number) => void, label: string) {
|
|
62
|
+
return (
|
|
63
|
+
<label className="block text-[11px] font-semibold text-zinc-600">
|
|
64
|
+
{label}
|
|
65
|
+
<input type="number" value={val} onChange={ev => set(Number(ev.target.value))} className="mt-0.5 w-full rounded-lg border border-zinc-300 px-2 py-1 text-xs" />
|
|
66
|
+
</label>
|
|
67
|
+
);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
return (
|
|
71
|
+
<div className="rounded-2xl border border-zinc-200 bg-white shadow-sm overflow-hidden">
|
|
72
|
+
<div className="flex flex-wrap items-center justify-between gap-2 border-b border-zinc-200 px-4 py-2.5">
|
|
73
|
+
<span className="text-sm font-bold text-zinc-900">ReportOS v3 — calculation engines</span>
|
|
74
|
+
<span className="rounded-full bg-indigo-50 px-2 py-0.5 text-[10px] font-bold text-indigo-700">routed archetype: {arch.name}</span>
|
|
75
|
+
</div>
|
|
76
|
+
|
|
77
|
+
<div className="flex flex-wrap gap-1 border-b border-zinc-100 px-3 py-2">
|
|
78
|
+
{(["valuation", "market", "risk", "esg", "ai", "energy", "confidence", "unit_economics"] as Engine[]).map(id => (
|
|
79
|
+
<button key={id} onClick={() => setEngine(id)} className={`rounded-lg px-2.5 py-1 text-xs font-semibold capitalize ${engine === id ? "bg-zinc-900 text-white" : "bg-zinc-100 text-zinc-600 hover:bg-zinc-200"}`}>{id.replace("_", " ")}</button>
|
|
80
|
+
))}
|
|
81
|
+
</div>
|
|
82
|
+
|
|
83
|
+
<div className="grid gap-4 p-4 lg:grid-cols-2">
|
|
84
|
+
<div className="space-y-2">
|
|
85
|
+
<div className="text-[10px] font-bold uppercase tracking-wider text-zinc-400">Inputs (editable)</div>
|
|
86
|
+
<div className="grid grid-cols-2 gap-2">
|
|
87
|
+
{engine === "market" && <>
|
|
88
|
+
{num(m.customers, x => setM({ ...m, customers: x }), "Customers")}
|
|
89
|
+
{num(m.spendPerCustomer, x => setM({ ...m, spendPerCustomer: x }), "Spend/customer $")}
|
|
90
|
+
{num(m.servedShare, x => setM({ ...m, servedShare: x }), "Served share (0-1)")}
|
|
91
|
+
{num(m.captureRate, x => setM({ ...m, captureRate: x }), "Capture rate (0-1)")}
|
|
92
|
+
{num(m.begin, x => setM({ ...m, begin: x }), "CAGR begin")}
|
|
93
|
+
{num(m.end, x => setM({ ...m, end: x }), "CAGR end")}
|
|
94
|
+
</>}
|
|
95
|
+
{engine === "valuation" && <>
|
|
96
|
+
{num(v.initial, x => setV({ ...v, initial: x }), "Initial $")}
|
|
97
|
+
{num(v.rate, x => setV({ ...v, rate: x }), "Discount rate")}
|
|
98
|
+
{num(v.exit, x => setV({ ...v, exit: x }), "Exit equity $")}
|
|
99
|
+
{num(v.invested, x => setV({ ...v, invested: x }), "Invested equity $")}
|
|
100
|
+
<label className="col-span-2 block text-[11px] font-semibold text-zinc-600">Cash flows (comma)
|
|
101
|
+
<input value={v.cf} onChange={ev => setV({ ...v, cf: ev.target.value })} className="mt-0.5 w-full rounded-lg border border-zinc-300 px-2 py-1 text-xs font-mono" />
|
|
102
|
+
</label>
|
|
103
|
+
</>}
|
|
104
|
+
{engine === "risk" && <>
|
|
105
|
+
{num(r.p, x => setR({ ...r, p: x }), "Probability (0-1)")}
|
|
106
|
+
{num(r.impact, x => setR({ ...r, impact: x }), "Impact (1-10)")}
|
|
107
|
+
{num(r.inherent, x => setR({ ...r, inherent: x }), "Inherent risk")}
|
|
108
|
+
{num(r.control, x => setR({ ...r, control: x }), "Control effectiveness (0-1)")}
|
|
109
|
+
</>}
|
|
110
|
+
{engine === "esg" && <>
|
|
111
|
+
{num(e.s1, x => setE({ ...e, s1: x }), "Scope 1 tCO₂e")}
|
|
112
|
+
{num(e.s2, x => setE({ ...e, s2: x }), "Scope 2 tCO₂e")}
|
|
113
|
+
{num(e.s3, x => setE({ ...e, s3: x }), "Scope 3 tCO₂e")}
|
|
114
|
+
{num(e.revenue, x => setE({ ...e, revenue: x }), "Revenue $")}
|
|
115
|
+
</>}
|
|
116
|
+
{engine === "ai" && <>
|
|
117
|
+
{num(a.dataQuality, x => setA({ ...a, dataQuality: x }), "Data quality")}
|
|
118
|
+
{num(a.infra, x => setA({ ...a, infra: x }), "Infrastructure")}
|
|
119
|
+
{num(a.talent, x => setA({ ...a, talent: x }), "Talent")}
|
|
120
|
+
{num(a.governance, x => setA({ ...a, governance: x }), "Governance")}
|
|
121
|
+
{num(a.process, x => setA({ ...a, process: x }), "Process")}
|
|
122
|
+
{num(a.change, x => setA({ ...a, change: x }), "Change readiness")}
|
|
123
|
+
</>}
|
|
124
|
+
{engine === "energy" && <>
|
|
125
|
+
{num(en.pvCost, x => setEn({ ...en, pvCost: x }), "PV lifecycle cost $")}
|
|
126
|
+
{num(en.pvEnergy, x => setEn({ ...en, pvEnergy: x }), "PV energy MWh")}
|
|
127
|
+
</>}
|
|
128
|
+
{engine === "confidence" && <>
|
|
129
|
+
{num(c.evidence, x => setC({ ...c, evidence: x }), "Evidence strength")}
|
|
130
|
+
{num(c.method, x => setC({ ...c, method: x }), "Method validity")}
|
|
131
|
+
{num(c.assumption, x => setC({ ...c, assumption: x }), "Assumption stability")}
|
|
132
|
+
</>}
|
|
133
|
+
{engine === "unit_economics" && <>
|
|
134
|
+
{num(ue.smSpend, x => setUe({...ue, smSpend: x}), "S&M Spend")}
|
|
135
|
+
{num(ue.newCust, x => setUe({...ue, newCust: x}), "New Customers")}
|
|
136
|
+
{num(ue.arpu, x => setUe({...ue, arpu: x}), "ARPU")}
|
|
137
|
+
{num(ue.margin, x => setUe({...ue, margin: x}), "Margin (0-1)")}
|
|
138
|
+
{num(ue.churn, x => setUe({...ue, churn: x}), "Churn (0-1)")}
|
|
139
|
+
</>}
|
|
140
|
+
</div>
|
|
141
|
+
</div>
|
|
142
|
+
<div className="space-y-2">
|
|
143
|
+
<div className="text-[10px] font-bold uppercase tracking-wider text-zinc-400">Live results</div>
|
|
144
|
+
{results.map((res, i) => <ResultRow key={i} r={res} />)}
|
|
145
|
+
</div>
|
|
146
|
+
</div>
|
|
147
|
+
|
|
148
|
+
{/* Quality gates */}
|
|
149
|
+
<div className="border-t border-zinc-100 px-4 py-3">
|
|
150
|
+
<div className="mb-2 text-[10px] font-bold uppercase tracking-wider text-zinc-400">Verification gates (run on every report)</div>
|
|
151
|
+
<div className="grid gap-1.5 sm:grid-cols-2">
|
|
152
|
+
{QUALITY_GATES.map(g => (
|
|
153
|
+
<div key={g.id} className="flex items-start gap-2 rounded-lg border border-zinc-100 bg-zinc-50 px-2.5 py-1.5">
|
|
154
|
+
<span className="rounded bg-emerald-100 px-1.5 py-0.5 font-mono text-[10px] font-bold text-emerald-700">{g.id}</span>
|
|
155
|
+
<div>
|
|
156
|
+
<div className="text-xs font-semibold text-zinc-800">{g.name}</div>
|
|
157
|
+
<div className="text-[10px] text-zinc-500">{g.check}</div>
|
|
158
|
+
</div>
|
|
159
|
+
</div>
|
|
160
|
+
))}
|
|
161
|
+
</div>
|
|
162
|
+
</div>
|
|
163
|
+
</div>
|
|
164
|
+
);
|
|
165
|
+
}
|