Architecture designer, author cluster names, FP filtering, new pages
- Add /architecture page: system-of-systems view with 8 layers, component cards, gap markers, source coverage chart, and clickable detail sidebar - Give author clusters meaningful names from orgs + draft topic keywords - Filter false positives (73 drafts, 54 ideas) from idea clusters, architecture, ideas listing, and search results - Add NIST source fetcher with curated catalog of 11 AI publications - New pages: trends, complexity, sources, false positives, idea analysis - Clickable gap cards with full details (evidence, priority, nearby work) - Component detail panel with linked drafts and top ideas Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
105
src/webui/app.py
105
src/webui/app.py
@@ -55,6 +55,14 @@ from webui.data import (
|
||||
get_ask_synthesize,
|
||||
get_category_summary,
|
||||
global_search,
|
||||
get_architecture,
|
||||
get_source_comparison,
|
||||
get_false_positive_profile,
|
||||
get_citation_influence,
|
||||
get_bcp_analysis,
|
||||
get_trends_data,
|
||||
get_complexity_data,
|
||||
get_idea_analysis,
|
||||
)
|
||||
|
||||
app = Flask(
|
||||
@@ -306,6 +314,17 @@ def idea_clusters():
|
||||
return render_template("idea_clusters.html", clusters=data)
|
||||
|
||||
|
||||
@app.route("/architecture")
|
||||
def architecture():
|
||||
data = get_architecture(db())
|
||||
return render_template("architecture.html", arch=data)
|
||||
|
||||
|
||||
@app.route("/api/architecture")
|
||||
def api_architecture():
|
||||
return jsonify(get_architecture(db()))
|
||||
|
||||
|
||||
@app.route("/similarity")
|
||||
def similarity():
|
||||
network = get_similarity_graph(db())
|
||||
@@ -331,7 +350,9 @@ def authors():
|
||||
@app.route("/citations")
|
||||
def citations():
|
||||
graph = get_citation_graph(db())
|
||||
return render_template("citations.html", graph=graph)
|
||||
influence = get_citation_influence(db())
|
||||
bcp = get_bcp_analysis(db())
|
||||
return render_template("citations.html", graph=graph, influence=influence, bcp=bcp)
|
||||
|
||||
|
||||
@app.route("/monitor")
|
||||
@@ -674,6 +695,88 @@ def create_app(dev: bool = False) -> Flask:
|
||||
return app
|
||||
|
||||
|
||||
# ── Sources & False Positives ────────────────────────────────────────────
|
||||
|
||||
|
||||
@app.route("/sources")
|
||||
def sources_page():
|
||||
data = get_source_comparison(db())
|
||||
return render_template("sources.html", data=data)
|
||||
|
||||
|
||||
@app.route("/false-positives")
|
||||
def false_positives_page():
|
||||
data = get_false_positive_profile(db())
|
||||
return render_template("false_positives.html", data=data)
|
||||
|
||||
|
||||
@app.route("/api/sources")
|
||||
def api_sources():
|
||||
data = get_source_comparison(db())
|
||||
return jsonify(data)
|
||||
|
||||
|
||||
@app.route("/api/false-positives")
|
||||
def api_false_positives():
|
||||
data = get_false_positive_profile(db())
|
||||
return jsonify(data)
|
||||
|
||||
|
||||
# ── Citation Influence & BCP ─────────────────────────────────────────────
|
||||
|
||||
|
||||
@app.route("/api/citations/influence")
|
||||
def api_citation_influence():
|
||||
return jsonify(get_citation_influence(db()))
|
||||
|
||||
|
||||
@app.route("/api/citations/bcp")
|
||||
def api_bcp_analysis():
|
||||
return jsonify(get_bcp_analysis(db()))
|
||||
|
||||
|
||||
# ── Trends & Complexity ──────────────────────────────────────────────────
|
||||
|
||||
|
||||
@app.route("/trends")
|
||||
def trends():
|
||||
data = get_trends_data(db())
|
||||
return render_template("trends_analysis.html", data=data)
|
||||
|
||||
|
||||
@app.route("/complexity")
|
||||
def complexity():
|
||||
data = get_complexity_data(db())
|
||||
return render_template("complexity.html", data=data)
|
||||
|
||||
|
||||
@app.route("/api/trends")
|
||||
def api_trends():
|
||||
data = get_trends_data(db())
|
||||
return jsonify(data)
|
||||
|
||||
|
||||
@app.route("/api/complexity")
|
||||
def api_complexity():
|
||||
data = get_complexity_data(db())
|
||||
return jsonify(data)
|
||||
|
||||
|
||||
# ── Idea Analysis ────────────────────────────────────────────────────────
|
||||
|
||||
|
||||
@app.route("/idea-analysis")
|
||||
def idea_analysis():
|
||||
data = get_idea_analysis(db())
|
||||
return render_template("idea_analysis.html", data=data)
|
||||
|
||||
|
||||
@app.route("/api/idea-analysis")
|
||||
def api_idea_analysis():
|
||||
data = get_idea_analysis(db())
|
||||
return jsonify(data)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
import argparse
|
||||
|
||||
|
||||
Reference in New Issue
Block a user