chore(align): sync Git with running container as authoritative source

One-time alignment to close drift between the running container
(qihu-aiflow / image qihuaiflow:with-deps) and this Git repository.
Container hotfixes previously persisted only via `docker commit` are now
captured in Git so Git becomes the single source of truth.

Backend:
- chat_service.py: accumulated fixes incl. EigenFlux README guidance
- chat_context.py / chat_media.py: URL/web-repo context injection
- api/url_reader.py: NEW SSRF-safe web/README reader (Issue #725)
- skills_admin.py & Skills.tsx: 14-scene capability unification
- pgvector_search.py, orchestrator.py, platform_knowledge.py,
  market.py, admin/models.py: drift sync

Frontend:
- ChatPage.tsx: collapsible AI think/act block (Issue #724)
- MarketPage / EvolutionDashboard / TokenDashboard styling sync

Migrations:
- 018_normalize_marketapp_scene.sql: fixed capability allowlist
  (prevents capability wipe on restart)

Alignment performed 2026-07-23 05:42:47. No deletions; secrets/venv/node_modules/
caches were not touched (tracked-source-only copy).
This commit is contained in:
QihuAI Design committed 2026-07-23 05:42:48 +08:00
1 parent 49f7503978
commit a08ec87b22
19 files changed
+7474 -7196

No files matched your search

@@ -1000,51 +1000,7 @@
margin-bottom: var(--space-lg);
}
.evo-anim-toggle {
display: flex;
align-items: center;
gap: var(--space-sm);
font-size: var(--text-xs);
color: var(--color-text-tertiary);
cursor: pointer;
user-select: none;
}
.evo-anim-toggle input {
width: 14px;
height: 14px;
accent-color: var(--color-accent);
cursor: pointer;
}
/* Baby sprout animation */
.evo-skill-node.baby.anim-on .evo-node-dot {
animation: baby-sprout 2s ease-in-out infinite;
}
.evo-skill-node.baby.anim-on {
animation: baby-glow 2s ease-in-out infinite;
}
@keyframes baby-sprout {
0%, 100% { transform: scale(1); }
50% { transform: scale(1.15); }
}
@keyframes baby-glow {
0%, 100% { box-shadow: 0 0 0 0 rgba(245, 158, 11, 0.3); }
50% { box-shadow: 0 0 16px 4px rgba(245, 158, 11, 0); }
}
/* Staging breathe animation */
.evo-skill-node.staging.anim-on {
animation: staging-breathe 3s ease-in-out infinite;
}
@keyframes staging-breathe {
0%, 100% { transform: scale(1); opacity: 0.85; }
50% { transform: scale(1.06); opacity: 1; }
}
/* 技能图谱动画已在 #717 中移除(边框光晕溢出且无实际用途) */
/* Toast */
.evo-toast {
@@ -1535,47 +1491,7 @@
}
}
/* ===== v2: Baby Sprout Animation (GAP-03) ===== */
.evo-skill-node.state-baby.anim-on {
animation: baby-sprout 2s ease-in-out infinite;
}
@keyframes baby-sprout {
0%, 100% {
transform: scale(1);
box-shadow: 0 0 0 0 rgba(255, 182, 193, 0.4);
}
50% {
transform: scale(1.15);
box-shadow: 0 0 20px 4px rgba(255, 182, 193, 0);
}
}
/* Baby skill sprout icon */
.evo-skill-node.state-baby.anim-on .evo-node-dot::after {
content: '🌱';
position: absolute;
top: -18px;
left: 50%;
transform: translateX(-50%);
font-size: 14px;
animation: sprout-wiggle 1.5s ease-in-out infinite;
}
@keyframes sprout-wiggle {
0%, 100% { transform: translateX(-50%) rotate(-5deg); }
50% { transform: translateX(-50%) rotate(5deg); }
}
/* Staging breathe animation */
.evo-skill-node.state-staging.anim-on {
animation: staging-breathe 3s ease-in-out infinite;
}
@keyframes staging-breathe {
0%, 100% { transform: scale(1); opacity: 0.8; }
50% { transform: scale(1.08); opacity: 1; }
}
/* ===== v2: 技能图谱动画已在 #717 中移除(边框溢出且无实际用途) ===== */
/* ===== v2: Toast messages ===== */
.evo-toast {