initial: blog-app snapshot

This commit is contained in:
omo
2026-08-17 17:11:27 +08:00
commit 65cb9d5ead
125 changed files with 14720 additions and 0 deletions

119
templates/analyze.html Normal file
View File

@@ -0,0 +1,119 @@
{% extends "base.html" %}
{% block title %}AI 分析 - AI Agent 项目追踪{% endblock %}
{% block content %}
<h1 class="mb-4">AI 分析</h1>
<!-- Control panel -->
<div class="card mb-4">
<div class="card-body">
<div class="row g-3">
<!-- Scope selector -->
<div class="col-md-3">
<label class="form-label">分析范围</label>
<select class="form-select" id="scopeSelect">
<option value="home">全站概览</option>
<option value="projects">所有项目</option>
<!-- 项目选项由 JS 从 /api/projects 动态填充, 与 DB 保持一致 -->
</select>
</div>
<!-- Preset buttons -->
<div class="col-md-6">
<label class="form-label">预设分析</label>
<div class="btn-group w-100" role="group">
<button type="button" class="btn btn-outline-primary preset-btn" data-preset="activity">
📊 活跃度评估
</button>
<button type="button" class="btn btn-outline-primary preset-btn" data-preset="evolution">
🚀 版本演进
</button>
<button type="button" class="btn btn-outline-primary preset-btn" data-preset="issues_hot">
🔥 Issue 热点
</button>
</div>
</div>
<!-- Start button -->
<div class="col-md-3 d-flex align-items-end">
<button type="button" class="btn btn-success w-100" id="startBtn">
开始分析
</button>
</div>
</div>
<!-- Custom question input -->
<div class="row g-3 mt-2">
<div class="col-12">
<label class="form-label">自定义问题 (可选)</label>
<input type="text" class="form-control" id="questionInput"
placeholder="例如: 这个项目的核心功能是什么? / 最近有什么重要更新?">
</div>
</div>
</div>
</div>
<!-- Output area with tabs -->
<div class="card">
<div class="card-header">
<ul class="nav nav-tabs card-header-tabs" id="outputTabs" role="tablist">
<li class="nav-item" role="presentation">
<button class="nav-link active" id="observation-tab" data-bs-toggle="tab"
data-bs-target="#observation" type="button" role="tab">
数据观察
</button>
</li>
<li class="nav-item" role="presentation">
<button class="nav-link" id="prompt-tab" data-bs-toggle="tab"
data-bs-target="#prompt" type="button" role="tab">
Prompt
</button>
</li>
<li class="nav-item" role="presentation">
<button class="nav-link" id="reasoning-tab" data-bs-toggle="tab"
data-bs-target="#reasoning" type="button" role="tab">
LLM 推理
</button>
</li>
<li class="nav-item" role="presentation">
<button class="nav-link" id="conclusion-tab" data-bs-toggle="tab"
data-bs-target="#conclusion" type="button" role="tab">
结论
</button>
</li>
</ul>
</div>
<div class="card-body">
<div class="tab-content" id="outputTabContent">
<div class="tab-pane fade show active" id="observation" role="tabpanel">
<div class="output-content" id="observationContent">
<div class="text-muted">等待分析开始...</div>
</div>
</div>
<div class="tab-pane fade" id="prompt" role="tabpanel">
<div class="output-content" id="promptContent">
<div class="text-muted">等待分析开始...</div>
</div>
</div>
<div class="tab-pane fade" id="reasoning" role="tabpanel">
<div class="output-content" id="reasoningContent">
<div class="text-muted">等待分析开始...</div>
</div>
</div>
<div class="tab-pane fade" id="conclusion" role="tabpanel">
<div class="output-content" id="conclusionContent">
<div class="text-muted">等待分析开始...</div>
</div>
</div>
</div>
</div>
</div>
{% endblock %}
{% block scripts %}
<script type="module">
import { initAnalyzePage } from "{{ url_for('static', filename='js/pages/analyze.js') }}";
initAnalyzePage();
</script>
{% endblock %}