quant-buddy-view · Quant-Dashboard-Veröffentlichung
Wandele die in quant-buddy-skill entdeckten Metriken in ein öffentlich teilbares Web-Dashboard um. Dieser Skill führt keine Kursabfragen oder Backtest-Explorationen durch (das ist die Aufgabe von quant-buddy-skill), sondern ist nur für drei Dinge zuständig:
- Registrieren eines Formelpakets (
formula_package) – registriere eine Gruppe von Formeln + Lesemodi für deren Ausgaben auf dem Server und erhaltepackage_id+signature. Wenn die zugrunde liegenden Daten aktualisiert werden, berechnet der Server automatisch neu – die abgerufenen Daten sind immer die aktuellsten. - Dashboard-HTML erstellen (
build_dashboard) – verwende eine Spezifikation, die beschreibt, „welche Ausgaben in welchen Diagrammen/Tabellen angezeigt werden sollen“, und kompiliere daraus ein Live-Datenabruf-HTML (das Gerüst ist in sich geschlossen, die Daten werden beim Öffnen in Echtzeit abgerufen). - Gehostete Veröffentlichung (
static_page) – lade das HTML in einen Objektspeicher hoch und erhalte einen öffentlichen Link unterhttps://pages.quantbuddy.cn/....
Wann dieser Skill vs. quant-buddy-skill verwendet wird
- Exploration / einmalige Abfrage („Heutige Kursänderung von Maotai“, „Führe einen Backtest zum Golden Cross aus“) → verwende quant-buddy-skill.
- Für eine Seite, die wiederholt betrachtet, an andere weitergegeben werden kann und deren Daten sich automatisch aktualisieren → wechsle nach der Exploration zu quant-buddy-view.
Voraussetzung: quant-buddy-skill muss zuerst installiert sein
Dieser Skill ist zur Laufzeit eigenständig (Registrierung, Erstellung, Veröffentlichung benötigen nur den api_key aus config.json und sind nicht von quant-buddy-skill-Code abhängig).
Die normale Nutzung hat jedoch eine harte Hürde: Vor der Registrierung eines Formelpakets muss jede Formelgruppe zuerst in quant-buddy-skill mit runMultiFormulaBatchStream erfolgreich ausgeführt werden, um die Datenausgabe zu bestätigen (siehe „Harte Regeln vor der Registrierung“ unten). Daher kann die Formelvalidierung ohne installiertes quant-buddy-skill nicht korrekt durchgeführt werden.
Wenn quant-buddy-skill noch nicht installiert ist, installiere es in dieser Reihenfolge:
-
Bevorzugt: GitHub-Installation (
npx skills) – quant-buddy-skill und dieser Skill gehören zum selben GitHub-Repositorypseudo-longinus/quant-buddy-skills:# Neuinstallation (noch nie installiert) npx skills add pseudo-longinus/quant-buddy-skills -g --all # Bereits installiert, nur Update npx skills update pseudo-longinus/quant-buddy-skills -y # Überprüfen, wo installiert / ob erfolgreich: npx skills list -g --jsonBei Symlink /
EPERM-Fehlern unter Windows, hänge--copyan das Ende des Befehls an und wiederhole ihn. Der Installationspfad ist normalerweise~/.agents/skills/quant-buddy-skill. -
Fallback: Lade ein ZIP-Archiv herunter und entpacke es manuell (wenn kein node/npx vorhanden oder Netzwerk eingeschränkt ist) – lade das offizielle
quant-buddy-skillZIP herunter, entpacke es in das Skills-Verzeichnis unterquant-buddy-skill/(entpacke zuerst in ein temporäres Verzeichnis; wenn es ein verschachteltesquant-buddy-skill/enthält, nimm das innere; behalte den vorhandenenapi_keyinconfig.json). quant-buddy-skill enthältscripts/self_update.py, das mit--url/--zip-path+--sha512+--versionzur validierten Entpackung verwendet werden kann – verwende es vorzugsweise.
Verzeichnisstruktur: Platziere quant-buddy-skill und quant-buddy-view nebeneinander auf derselben Ebene:
<Skills-Verzeichnis>/
quant-buddy-skill/ ← Exploration / Formelvalidierung (runMultiFormulaBatchStream, confirmDataMulti)
quant-buddy-view/ ← Dieser Skill: Formelpaket registrieren / Dashboard erstellen / Veröffentlichen
Diese nebeneinander liegende Struktur wird empfohlen: Wenn
formula_package import(Migration alter Anmeldedaten) keinen expliziten Pfad findet, greift es auf das „gleichrangige../quant-buddy-skill“ als Fallback zurück.
- Konfiguration: Konfiguriere
api_keyin quant-buddy-skill (beide Skills haben unabhängige Keys). Nach der Installation kannst du dort Formeln validieren und dann zurück zu diesem Skill gehen, um sieregister(zu registrieren).
Migration für bestehende Benutzer: Bereits in der alten Version von quant-buddy-skill registrierte Formelpakete müssen nicht erneut registriert werden – verwende python scripts/formula_package.py import ..., um die Anmeldedaten auf einmal in diesen Skill zu importieren und die alte package_id für Datenabfragen weiterzuverwenden (siehe tools/formula_package.md im Abschnitt „Migration von Anmeldedaten aus altem quant-buddy-skill“).
Einstiegspunkte (zuerst den Typ bestimmen)
Agent-Routing-Regel: Wenn der Benutzer Vorlagenmarkt / offizielle Vorlagen / öffentliche Vorlagen / veröffentlichte Vorlagen erwähnt → verwende zuerst
scripts/static_page.py templates/template, um die online öffentlichen Vorlagen zu lesen; lade das HTML über diedownload_urlaus demtemplate-Rückgabewert direkt von OSS herunter, ersetze das Ziel, den Text und die Formelpaket-Anmeldedaten und lade es dann mituploadals eigene Seite hoch. Wenn der Benutzer eine spezifische Seitenform wünscht, aber keine öffentliche Vorlage angibt → siehe zuerst lokalexamples/(Offline-Fallback für Online-Vorlagen und Vorlagenentwicklungsquelle); wenn der Benutzer von der Anforderung bis zum Link möchte → sieheworkflows/; wenn der Benutzer eine komplexe benutzerdefinierte Seite oder Migration einer alten HTML-Seite möchte → sieheguides/.
| Typ | Anzeigename | Einstiegspunkt | Wann verwenden |
|---|---|---|---|
| Seitenvorlage | Einzelaktien-Schnellübersicht | examples/single-stock/ | Profilseite für ein einzelnes Ziel: Zusammenfassung + Zahlenkarten für aktuellen Preis/Änderung/20d/60d/PE/PB/Volumen + Hauptpreisdiagramm; muss mit spec.template.json beginnen |
| Seitenvorlage | Einzelaktien-Bewertungs-Check | examples/valuation-financial-profile/ | Bewertungs- und Finanzseite für ein einzelnes Ziel: Historische PE/PB/PCF-Bänder, Finanztrends, Cashflow-Qualität, Bewertungsänderungsattribution; wird mit page.template.html geliefert |
| Seitenvorlage | Index-Anomalie-Ranking | examples/index-anomaly/ | Überwachung von Anomalien in Index-/Aktienpool-Komponenten: Anomalie-Ranking + Gewinn-/Verlustverteilung + Indexverlauf; wird mit page.template.html geliefert, dunkles Interface, data-kernel Datenabruf |
| Seitenvorlage | Multi-Faktor-Aktienscreening-Dashboard | examples/multi-factor-screener/ | Thematischer Aktienpool + Multi-Faktor-Scoring + TopN-Ranking + Backtest/rankIC + Kerzencharts + Formel-Audit; feste Rollen RANK / BACKTEST / KLINE_*, RANK wird auf dem ersten Bildschirm bevorzugt gerendert |
| Seitenvorlage | Täglicher Rohstoff-Long/Short-Bericht | examples/commodity-daily/ | Täglicher Rohstoff-Futures-Bericht: dominante Long/Short-Konflikte nach Sektor + heutige Anomalien + Sparklines der führenden Kontrakte; wird mit page.template.html geliefert |
| Allgemeiner Workflow | Standard-Live-Dashboard | workflows/dashboard-end-to-end.md | Wenn der Benutzer „ein teilbares Dashboard/einen Link erstellen“ möchte, aber keine bestimmte Seitenvorlage angibt |
| Entwicklungsanleitung | Benutzerdefinierte Seite | guides/bespoke-page.md | Für benutzerdefinierte HTML/CSS/SVG-Seiten, die build_dashboard nicht erstellen kann, oder für Migration vorhandener HTML-Seiten |
| Migrationstool | Alte Seite mit öffentlicher Hülle versehen | tools/retrofit_share_shell.md | Bereits veröffentlichtes/generiertes HTML muss alte QR-Codes, alte Kopf- und Fußzeilen entfernen und dieselbe page_id für Updates beibehalten |
Harte Regel: Wenn der Benutzer „Profilseite einer bestimmten Aktie/eines bestimmten Index, Aktienprofil, Einzelaktienprofil, Seite eines einzelnen Ziels“ wünscht, lies zuerst
examples/single-stock/README.md, kopiereexamples/single-stock/spec.template.jsonals Ausgangspunkt für die Spezifikation und behaltetemplate: "single-stock"bei. Schreibe keine alte Minimal-Spezifikation mit „1 Preiskurve + 4 Zahlenkarten“ von Hand;build_dashboardlehnt dieses alte Gerüst ab. Harte Regel: Wenn der Benutzer fragt, „ob diese Aktie teuer ist / ob sich die Fundamentaldaten verbessern / Bewertungs- und Finanzprofil / historische PE/PB-Bänder / Finanztrends / Cashflow-Qualität“ und dies als Landingpage oder öffentlichen Link möchte, lies zuerstexamples/valuation-financial-profile/README.md, kopiereexamples/valuation-financial-profile/page.template.htmlals Ausgangspunkt, validiere und registriere das von dieser Vorlage erforderliche Formelpaket; falle nicht auf eine normalesingle-stock-Kartenseite zurück. Harte Regel: Wenn der Benutzer „Anomalien in den Komponenten eines Index / Aktienpools, Anomalie-Ranking, Drag-Ranking-ähnliche Auflistung“ wünscht (z. B. „Welche Aktien im CSI 500 sind heute anomal?“, „CSI 300 Anomalie-Überwachung“, „SSE 50 Gewinn-/Verlustranking“), lies zuerstexamples/index-anomaly/README.md, kopiereexamples/index-anomaly/page.template.htmlals Ausgangspunkt, ersetze die__INDEX_*__-Platzhalter und bindedata-kernel.jsein, bevor du veröffentlichst; schreibe kein helles/allgemeines HTML von Hand, das vom Thema abweicht. Harte Regel: Wenn der Benutzer „thematischer Aktienpool / Konzeptaktien / Branchenpool + Multi-Faktor-Scoring / TopN / Backtest / rankIC / Kerzencharts / Formel-Audit“ für eine Aktien-Screening-Arbeitsplatzseite wünscht, lies zuerstexamples/multi-factor-screener/README.md, kopiereexamples/multi-factor-screener/page.template.htmlals Ausgangspunkt; die Formelpaket-Rollen sind aufRANK/BACKTEST/KLINE_*festgelegt,RANKmuss auf dem ersten Bildschirm bevorzugt gerendert werden,BACKTESTundKLINE_*können lokal herabgestuft werden. Harte Regel: Bei der Wiederverwendung einer öffentlichen Vorlage gehören diepackage_id + signatureim Vorlagen-HTML dem ursprünglichen Autor; du musst die Formeln gemäß dem aktuellen Benutzerziel erneut validieren, dein eigenes Formelpaket registrieren und die Anmeldedaten auf der Seite ersetzen, bevor du sie veröffentlichst. Verwende die ursprünglichen Anmeldedaten der öffentlichen Vorlage nicht direkt als Datenquelle für die Benutzerseite. Harte Regel: Dersubtitleund die „Zusammenfassung“ auf der Profilseite eines einzelnen Ziels dürfen nur Werte verwenden, die während der Build-Phase vonbuild_dashboardin Echtzeit aus den endgültigen Outputs abgerufen wurden. Wenn das Skript „Text stimmt nicht mit Echtzeit-Datenabrufergebnissen überein“ zurückgibt, schreibe den Text gemäß den zurückgegebenenfactsneu, bevor du das HTML generierst/hochlädst; verwende keine alten Abfrageergebnisse oder manuelle Schätzungen. Harte Regel: Alle Landingpages müssen die gemeinsamen Komponenten ausassets/share-shell/integrieren. Die Vorlagen sind nur für den Hauptinhalt undgetPosterData()verantwortlich; Kopfzeilen, Fußzeilen, Aktualisierungs-Schaltflächen, Sharing-Poster-Overlays, Link-Kopieren, Kopieren/Herunterladen von PNG und feste Poster-Kopf-/Fußzeilen werden alle von der gemeinsamen Shell bereitgestellt. Kopiere oder modifiziere nicht eigenmächtig alte QR-Code-Blöcke, alte Aktualisierungsschaltflächen oder alte Sharing-Overlays in einzelnen Vorlagen. Harte Regel: Das Sharing-Poster wird standardmäßig von der gemeinsamenposter.jsals Frontend-Screenshot des Seiten-Hauptteils generiert – lieber weniger als mehr; Vorlagen könnendata-qb-poster-targetverwenden, um den Kern-Screenshot-Bereich zu markieren, undgetPosterData()stellt nur Titel/Zusammenfassung und strukturierte Fallback-Kandidaten bereit; verlasse dich nicht darauf, dass der Agent das Poster-Layout von Hand schreibt, und stopfe nicht den gesamten Seiteninhalt insections. Harte Regel: Wenn der Benutzer „bereits generiertes HTML modifizieren / QR-Code entfernen / aktuelle Kopf-/Fußzeilen entfernen / an feste Kopf-/Fußzeilen anpassen“ möchte, verwende vorzugsweisescripts/retrofit_share_shell.py. Verlasse dich nicht auf lange Prompts, damit der Agent DOM von Hand löscht; behalte standardmäßig den Hero-Bereich des alten Seitenkörpers bei, entferne nur die QR-Code-Karte und die alte Fußzeile darin und füge dann direkt die gemeinsamen Kopf-/Fußzeilen am Anfang/Ende des<body>ein; erstelle zuerst eine lokale migrierte Version zur Überprüfung und überschreibe dann dieselbepage_idmitupdate:true.
-
Formelpaket registrieren (
scripts/formula_package.py register)formulas: Eine Gruppe von"Variable = Ausdruck"(verwende die in quant-buddy-skill während der Exploration validierten Formeln).reads: Liste der externen Ausgaben, jede Deklaration enthältoutput(Ausgabenname) +read_mode(Lesemodus).- Bei Erfolg werden
package_id+signaturezurückgegeben und automatisch inoutput/formula_packages/<package_id>.jsongespeichert. - ⚠️ Die
signaturewird nur einmal bei der Registrierung im Klartext zurückgegeben; wenn die lokalen Anmeldedaten verloren gehen, sind sie nicht wiederherstellbar (kann mitrefreshrotiert werden).
-
Dashboard erstellen (
scripts/build_dashboard.py)- Schreibe eine Spezifikation:
title+panels[], jedes Panel rendert einen bestimmtenoutputalsline/bar/table/number/text/raw. - Wenn eine Seitenvorlage zutrifft, kopiere zuerst
spec.template.jsonoderpage.template.htmlaus dem Vorlagenverzeichnis und ersetze dann Assets, Daten, erklärenden Text und optionale Module. - Die Seite ruft Daten in Echtzeit ab (siehe unten „Datenabruf: Echtzeit-Datenabruf“);
modemuss nicht in die Spezifikation geschrieben werden. - Die Ausgabe wird standardmäßig in
output/pages/<slug>.htmlgeschrieben; durch Übergabe von"upload": truekönnen Erstellung und Veröffentlichung in einem Schritt erfolgen.
- Schreibe eine Spezifikation:
-
Veröffentlichung / Verwaltung (
scripts/static_page.py)upload: Lade HTML hoch → erhaltepage_id+ öffentlicheurl; kanntitle(Standardwert aus<title>) unddescription(Seitenbeschreibung, ≤1000 Zeichen, für Listen-/Detailansichten) enthalten.update: Ersetze den Inhalt einer bereits veröffentlichten Seite, URL / page_id bleiben unverändert (verwende dies, wenn eine bereits geteilte Seite ergänzt/angepasst werden soll; Besucher sehen beim Aktualisieren den neuen Inhalt, ohne neues Kontingent zu verbrauchen). Es können auch nurtitle/descriptiongeändert werden (leerer String""fürdescriptionlöscht sie; Weglassen behält den Originalwert).download: Rufe das HTML einer bereits veröffentlichten Seite zur erneuten Bearbeitung ab (Authentifizierung → URL → direkter OSS-Download, verbraucht keine serverseitige Bandbreite), nach der Bearbeitung mitupdateüberschreiben.list/revoke: Auflisten / Widerrufen meiner Seiten (maximal 200 aktive Seiten, einzelne Seite ≤ 2 MB).thumbnail: Setze / ersetze ein reines Präsentations-Cover-Bild für eine bereits veröffentlichte Seite (direkter Upload von PNG/JPG, ≤2 MB). Wird nur für<img>-Vorschauen in Listen/Details/Vorlagenwänden verwendet, beeinflusst nicht das HTML, beeinträchtigt nicht den Datenabruf und belegt kein Kontingent für aktive Seiten; wird unter der page_id im OSS gespeichert und bleibt auch nach der Umwandlung in eine Vorlage gültig.upload/updateakzeptierenthumbnail_file; nach erfolgreichem HTML-Upload wird das Cover automatisch hochgeladen; bei Fehlern des Thumbnails wird nur eine Warnung zurückgegeben, das HTML wird nicht zurückgesetzt.templates/template: Durchsuchen / Wiederverwenden öffentlicher Vorlagen –templateslistet Vorlagen auf (normale Benutzer sehen nur veröffentlichte),templatezeigt Details einer Vorlage und gibt diedownload_url, lade das HTML direkt von OSS herunter, ersetze es durch deine eigenen Ziele/Texte/Formelpaket-Anmeldedaten und lade es dann mituploadals deine eigene Seite hoch.- Vor
upload/updatewird eine erzwungene Überprüfung auf die gemeinsame Share-Shell durchgeführt; fehlende gemeinsame Kopf-/Fußzeilen werden automatisch eingefügt und kompiliert; das Design kann nur durchtheme/--qb-shell-*-Variablen überschrieben werden; bei verbleibenden Platzhaltern oder alten QR-Code-Überresten wird die Veröffentlichung verweigert. - Berechtigungen / Verantwortlichkeiten: Eigene Seiten sind standardmäßig nur für den Besitzer;
is_test-Benutzer können Seiten andereris_test-Benutzer mitdownload/update/thumbnailübergreifend bearbeiten,listmitscope=test_allzeigt alle Testbenutzer an (Seiten normaler Benutzer sind immerFORBIDDEN). Das Durchsuchen/Wiederverwenden öffentlicher Vorlagen ist für alle Benutzer offen (normale Benutzer sehen nur veröffentlichte); das Einreichen/Ändern/Online-/Offline-Schalten von Vorlagen ist nur füris_test; die Umwandlung einer vorhandenen Seite in eine öffentliche Vorlage ist eine Backend (growthX)-Aktion – dieser Skill macht nur „Lesen + Wiederverwenden“ von Vorlagen, keine Schreibvorgänge.
Die Authentifizierung erfolgt nur über den
api_keyinconfig.json(für den Datenabruf ist nicht einmal derapi_keyerforderlich, nurpackage_id + signature). Dieser Skill verwaltet keine Sitzungen /task_id.
Datenabruf: Echtzeit-Datenabruf
Dashboards rufen Daten in Echtzeit ab: Das HTML enthält package_id + signature; wenn ein Besucher die Seite öffnet, wird sofort queryFormulaPackage aufgerufen, um die neuesten Daten abzurufen und zu rendern – wenn die zugrunde liegenden Daten aktualisiert werden, wird automatisch neu berechnet, die Seite ist beim Öffnen immer aktuell, das ist der Zweck des Formelpaket-Designs. Die Spezifikation muss kein mode-Feld enthalten.
- Die Seite ist „live“: Daten werden nicht in das HTML eingebettet, sondern zur Laufzeit in Echtzeit abgerufen; während der Build-Phase werden Daten nur einmal für einen Gesundheitscheck abgerufen (Datenqualität + Textkonsistenz für einzelne Ziele), nicht eingebettet.
- Zwei Voraussetzungen (beide erfüllt): ① Der
queryFormulaPackage-Endpunkt hat CORS für die Seiten-Domainpages.quantbuddy.cngeöffnet (der aktuelle HTTPS-Endpunkt hat*geöffnet); ② Diesignaturewird mit der Seite öffentlich gemacht (Formelpaketabfragen verwenden die Signatur als Fähigkeits-Token, das Design erlaubt die Einbettung in Seiten). - ⚠️ Das Protokoll muss übereinstimmen: Wenn die Seite auf
https://veröffentlicht wird, muss derendpointinconfig.jsonebenfallshttps://sein, sonst blockiert der Browser den Datenabruf aufgrund gemischter Inhalte. Der aktuelle Endpunkt ist bereitshttps://www.quantbuddy.cn/skill.
Harte Regeln
- Chinesische Parameter über @file oder Umgebungsvariablen: Die Windows PowerShell-Befehlszeile kürzt direkt übergebene chinesische Zeichen ggf. mit GBK ab. Verwende für die Formelregistrierung und das Schreiben von Spezifikationen immer
@params.json(UTF-8) oder die UmgebungsvariablenFP_PARAMS/BD_PARAMS/SP_PARAMS. - Formeln müssen vor der Registrierung validiert werden (harte Hürde): Jede für die Registrierung eingereichte Formelgruppe muss zuerst in quant-buddy-skill mit
runMultiFormulaBatchStreamausgeführt werden, um die Datenausgabe zu bestätigen (die Formelsyntax ist auf beiden Seiten identisch und kann unverändert validiert werden). Nur bei Erfolg istregistererlaubt. Erfinde keine unvalidierten Ausdrücke und „registriere sie einfach und schaue dann, ob ein Fehler auftritt“ – der serverseitige Testlese beim Registrieren ist nur ein Fallback und ersetzt diesen Schritt nicht. - Auch die Validierungsparameter müssen sauber ausgetauscht werden: Beim Aufruf von
runMultiFormulaBatchStreammussuser_querydie aktuelle Benutzeranfrage und das aktuelle Asset widerspiegeln; wenntask_idübergeben wird, muss es eine neue Aufgabe für diesen Vorgang sein. Beim Kopieren von Beispielen darf nicht nurformulasersetzt werden, während alteuser_querywie „Maotai Factsheet“ stehen bleiben, da sonst die Backend-Überwachung und -Wiedergabe verunreinigt werden. - Signatur ist ein Anmeldedatum: Gib sie nicht in Dialogen aus, die für Endbenutzer bestimmt sind; das Dashboard schreibt sie zur Echtzeit-Datenabfrage in das öffentliche HTML; stelle vor der Veröffentlichung sicher, dass dies akzeptabel ist.
- Fehler klar kommunizieren: Wenn ein Skript
code != 0zurückgibt, teile dem Benutzer mit, „bei welchem Schritt (Befehlsname) + Fehlerzusammenfassung“; beende nicht mit einer leeren Ausgabe oder reinen Logs.
Werkzeugübersicht
Parameter-Konvention: Alle Skriptparameter sind ein JSON-String als Positionsparameter (oder
@params.json/ Umgebungsvariable), z. B.list '{"scope":"test_all"}'. Die Befehlszeile akzeptiert auch die intuitive Schreibweise--scope test_all/--key=value(nur für einfache Parameter; komplexe Strukturen wie Formeln, Spezifikationen verwenden weiterhin@file/Umgebungsvariablen, um GBK-Kürzungen zu vermeiden).
| Skript | Befehl | Funktion | Dokumentation |
|---|---|---|---|
scripts/formula_package.py | register / query / list / revoke / refresh | Formelpaket: Datenabruffähigkeit registrieren, Daten mit Paket-Anmeldedaten streamen | tools/formula_package.md |
scripts/build_dashboard.py | (Einzelbefehl) | Spezifikation → Live-Echtzeit-Datenabruf-Dashboard-HTML | tools/build_dashboard.md |
scripts/compile_bespoke_page.py | (Einzelbefehl) | [Shell-Verarbeitungsskript] Bespoke-Vorlage → Inklusive gemeinsamer Share-Shell / Logo / QR-Mini / Data-Kernel in sich geschlossenes HTML | guides/share-shell.md |
scripts/retrofit_share_shell.py | (Einzelbefehl) | [Shell-Verarbeitungsskript] Altes HTML / bereits veröffentlichte Seite → Alte QR-Codes / alte Kopf-/Fußzeilen entfernen, gemeinsame Share-Shell einfügen (assets/share-shell/), kann mit ursprünglichem Link aktualisiert werden | tools/retrofit_share_shell.md |
scripts/static_page.py | upload / update / download / list / revoke / thumbnail / templates / template | Statische Seiten veröffentlichen/ersetzen/herunterladen/verwalten, öffentlichen Link erhalten (update ersetzt Inhalt ohne Linkänderung; download ruft HTML zur Bearbeitung ab; thumbnail setzt Präsentations-Cover; templates/template durchsuchen und wiederverwenden öffentliche Vorlagen; is_test kann benutzerübergreifend arbeiten) | tools/static_page.md |
scripts/verify_page.mjs | (Einzelbefehl) | Seitenabnahme vor/nach der Veröffentlichung: 1440px-, 390px-, 320px-Viewport, h1, Platzhalter, horizontale Überläufe, Kern-Konsolenfehler | — |
scripts/render_cover.py | (Wird von build_dashboard aufgerufen) | Cover-Rasterisierung und -Zusammenstellung als Fallback: capture_page_cover verwendet systemeigenen Edge/Chrome im Headless-Modus, um eine „Cover-Modus-Seite“ als ganzseitiges PNG zu erfassen; zusammengesetzte Cover (vollflächiges nacktes Bild/Brand-Poster) verwenden Browser → reines Python (cairosvg/svglib) → SVG, dreistufiger Fallback. Plattformübergreifend, keine starken Abhängigkeiten, beeinträchtigt nicht die HTML-Veröffentlichung | — |
scripts/render_existing_page_thumbnail.py | (Einzelbefehl) | Fehlendes Cover für bereits veröffentlichte/öffentliche Vorlagen-HTML ergänzen: HTML herunterladen oder lesen → eingebettete Formelpaket-Anmeldedaten parsen → zuerst echte Outputs abrufen und temporär QB.query ersetzen → dann systemeigenen Edge/Chrome verwenden, um 1200×675 PNG zu erfassen; kann mit upload:true direkt thumbnail_url setzen | tools/static_page.md |
assets/data-kernel.js | (Frontend-Kernel, kein Skript) | Eine gemeinsame „Datenabruf + Bereinigung + Fehlertoleranz“-Komponente für handgeschriebene Bespoke-Seiten; wird inline in das <script> der Seite eingefügt | guides/bespoke-page.md |
assets/share-shell/ | (Gemeinsame Komponenten) | Von allen Landingpages gemeinsam genutzte Kopfzeilen, Fußzeilen, Aktualisierungs-Schaltflächen, Sharing-Poster-Overlays, Poster-Canvas, Link-Kopieren und Kopieren/Herunterladen-Verhalten | guides/share-shell.md |
examples/valuation-financial-profile/page.template.html | (Offline-Referenzvorlage, kein Skript) | Einzelaktien-Bewertungs-Check: Bewertungsbänder, Finanztrends, Bewertungswaage-Attribution | examples/valuation-financial-profile/README.md |
examples/index-anomaly/page.template.html | (Offline-Referenzvorlage, kein Skript) | Index-Anomalie-Ranking: Anomalie-Ranking, Gewinn-/Verlustverteilung, Index-Sparkline | examples/index-anomaly/README.md |
examples/commodity-daily/page.template.html | (Offline-Referenzvorlage, kein Skript) | Täglicher Rohstoff-Long/Short-Bericht: Long/Short-Dominanz, Anomalie-Ranking, Sektorbalken, Sparkline | examples/commodity-daily/README.md |
Zwei Produktionspfade: Standard-Dashboards gehen über
build_dashboard(deklarativer, schneller Weg); für Designseiten mit benutzerdefinierten Layouts/SVG wird HTML von Hand geschrieben, die Datenschicht verwendet einheitlichassets/data-kernel.js(QB.queryfür Datenabruf,QB.series/lastValue/topValuesfür Auspacken und Bereinigen), anstatt dass jede Seite ihr eigenesfetch/Auspacken schreibt und in die gleichen Fallstricke mit „falschen 0/Datenlücken“ tappt. Siehe guides/bespoke-page.md. Vor der Veröffentlichung mitscripts/verify_page.mjs <html_file>auf Desktop- und 390px/320px-Mobilansichten prüfen, um sicherzustellen, dass keineQB_SHARED_/replace_with_signature/pkg_replace-Überreste vorhanden sind, ein<h1>existiert, keine kritischen horizontalen Überläufe und keine Kern-Datenabruf-Skriptfehler auftreten.
Konfiguration
config.json: Trage api_key ein (erhältlich unter https://www.quantbuddy.cn/login) oder setze die Umgebungsvariable QUANT_BUDDY_API_KEY. Du kannst config.local.json erstellen, um endpoint / api_key usw. zu überschreiben (nicht im Repository). formula_package.py, build_dashboard.py und static_page.py verwenden denselben endpoint.