274 lines
12 KiB
HTML
274 lines
12 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="zh-CN">
|
||
<head>
|
||
<meta charset="UTF-8">
|
||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||
<title>光湖 · 开源模块仓库</title>
|
||
<style>
|
||
:root {
|
||
--bg: #0a0a16;
|
||
--card: rgba(16,28,56,.75);
|
||
--edge: rgba(110,160,230,.18);
|
||
--edge-h: rgba(155,205,255,.4);
|
||
--t: rgba(200,218,248,.92);
|
||
--dim: rgba(140,180,220,.5);
|
||
--dim2: rgba(120,160,200,.28);
|
||
--glow: rgba(160,210,255,.95);
|
||
--green: rgba(140,220,180,.88);
|
||
--gold: rgba(220,195,130,.88);
|
||
--rose: rgba(230,140,160,.85);
|
||
}
|
||
*{margin:0;padding:0;box-sizing:border-box}
|
||
body{
|
||
background:var(--bg); color:var(--t);
|
||
font-family:-apple-system,"PingFang SC","Microsoft YaHei","Inter",sans-serif;
|
||
min-height:100vh; font-size:16px; line-height:1.6; overflow-x:hidden;
|
||
}
|
||
canvas#bg{position:fixed;top:0;left:0;z-index:0;pointer-events:none}
|
||
|
||
.wrap{position:relative;z-index:1;max-width:960px;margin:0 auto;padding:50px 20px 80px}
|
||
|
||
/* Hero */
|
||
.hero{text-align:center;padding:30px 0 50px}
|
||
.hero .dot{display:inline-block;width:14px;height:14px;border-radius:50%;
|
||
background:radial-gradient(circle,rgba(180,220,255,.85),rgba(100,150,220,.3));
|
||
box-shadow:0 0 50px rgba(140,190,255,.55),0 0 100px rgba(100,150,230,.18);
|
||
animation:pulse 3.5s ease-in-out infinite; margin-bottom:12px}
|
||
@keyframes pulse{0%,100%{transform:scale(1);opacity:1}50%{transform:scale(1.35);opacity:.7}}
|
||
.hero h1{font-size:40px;font-weight:200;letter-spacing:14px;color:rgba(175,215,248,.78);margin:12px 0}
|
||
.hero .sub{font-size:17px;color:var(--dim);letter-spacing:4px}
|
||
.hero .line{width:80px;height:1px;background:linear-gradient(90deg,transparent,var(--edge-h),transparent);margin:24px auto}
|
||
|
||
/* section titles */
|
||
.sec-title{font-size:14px;text-transform:uppercase;letter-spacing:6px;color:var(--dim2);margin:40px 0 20px;text-align:center}
|
||
|
||
/* Module Grid */
|
||
.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:18px}
|
||
.card{
|
||
background:var(--card); border:1px solid var(--edge); border-radius:20px;
|
||
padding:28px 24px; cursor:pointer; transition:all .3s; position:relative; overflow:hidden;
|
||
}
|
||
.card:hover{border-color:var(--edge-h);background:rgba(22,38,72,.85);transform:translateY(-3px);box-shadow:0 8px 32px rgba(0,0,0,.3)}
|
||
.card .tag{display:inline-block;font-size:11px;padding:3px 10px;border-radius:10px;margin-bottom:14px}
|
||
.card .tag.live{background:rgba(140,220,180,.12);color:var(--green);border:1px solid rgba(140,220,180,.2)}
|
||
.card .tag.soon{background:rgba(180,170,140,.08);color:rgba(200,180,130,.7);border:1px solid rgba(180,170,140,.15)}
|
||
.card .icon{font-size:36px;margin-bottom:10px}
|
||
.card .name{font-size:20px;font-weight:600;color:var(--t);margin-bottom:4px}
|
||
.card .id{font-size:12px;color:var(--dim2);font-family:monospace;margin-bottom:10px}
|
||
.card .desc{font-size:14px;color:var(--dim);line-height:1.5}
|
||
.card .arrow{position:absolute;bottom:20px;right:24px;color:var(--dim2);font-size:18px;transition:all .3s}
|
||
.card:hover .arrow{color:var(--glow);transform:translateX(4px)}
|
||
|
||
/* Repo card 特殊样式 */
|
||
.card.repo{border-color:rgba(155,120,200,.2);background:linear-gradient(135deg,rgba(25,20,45,.8),rgba(18,30,50,.8))}
|
||
.card.repo:hover{border-color:rgba(180,140,220,.35)}
|
||
.card.repo .tag{background:rgba(160,130,200,.1);color:rgba(190,155,220,.8);border:1px solid rgba(160,130,200,.2)}
|
||
.card.repo .icon{font-size:32px}
|
||
|
||
/* Modal */
|
||
.overlay{display:none;position:fixed;inset:0;background:rgba(0,0,0,.65);z-index:100;align-items:center;justify-content:center}
|
||
.overlay.show{display:flex}
|
||
.modal{
|
||
background:rgba(12,22,44,.96);border:1px solid var(--edge-h);border-radius:24px;
|
||
max-width:580px;width:90%;max-height:85vh;overflow-y:auto;padding:40px 32px;
|
||
animation:modalIn .25s ease-out;
|
||
}
|
||
@keyframes modalIn{from{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}
|
||
.modal .m-icon{font-size:48px;margin-bottom:8px}
|
||
.modal .m-id{font-size:13px;color:var(--dim2);font-family:monospace;margin-bottom:6px}
|
||
.modal .m-name{font-size:26px;font-weight:600;color:var(--t);margin-bottom:16px}
|
||
.modal .m-desc{font-size:15px;color:var(--dim);line-height:1.7;margin-bottom:20px}
|
||
|
||
.modal .section{margin-bottom:20px}
|
||
.modal .section h3{font-size:13px;text-transform:uppercase;letter-spacing:3px;color:var(--dim2);margin-bottom:8px}
|
||
.modal .code{
|
||
background:rgba(0,0,0,.35);border:1px solid var(--edge);border-radius:10px;
|
||
padding:14px 18px;font-size:13px;font-family:"SF Mono",Menlo,monospace;
|
||
color:var(--green);overflow-x:auto;white-space:pre-wrap;word-break:break-all
|
||
}
|
||
.modal .intent-chain{display:flex;flex-direction:column;gap:8px}
|
||
.modal .intent-step{display:flex;align-items:center;gap:12px;padding:8px 12px;background:rgba(255,255,255,.02);border-radius:8px}
|
||
.modal .intent-step .s-icon{font-size:18px;width:28px;text-align:center}
|
||
.modal .intent-step .s-step{font-size:14px;color:var(--t);font-weight:500}
|
||
.modal .intent-step .s-why{font-size:12px;color:var(--dim);margin-left:auto}
|
||
|
||
.modal .btns{display:flex;gap:12px;margin-top:28px;flex-wrap:wrap}
|
||
.modal .btns a,.modal .btns button{
|
||
display:inline-block;padding:12px 28px;border-radius:14px;font-size:15px;
|
||
text-decoration:none;cursor:pointer;font-family:inherit;
|
||
transition:all .25s;
|
||
}
|
||
.modal .btn-go{
|
||
background:linear-gradient(135deg,rgba(100,160,220,.25),rgba(120,90,200,.15));
|
||
border:1px solid var(--edge);color:var(--glow);
|
||
}
|
||
.modal .btn-go:hover{background:linear-gradient(135deg,rgba(100,160,220,.4),rgba(120,90,200,.25));border-color:var(--edge-h)}
|
||
.modal .btn-close{background:rgba(255,255,255,.03);border:1px solid var(--edge);color:var(--dim)}
|
||
.modal .btn-close:hover{background:rgba(255,255,255,.06)}
|
||
|
||
/* Footer */
|
||
.foot{text-align:center;padding:50px 0 0;font-size:13px;color:var(--dim2)}
|
||
.foot a{color:var(--dim);text-decoration:none;transition:color .2s}
|
||
.foot a:hover{color:var(--glow)}
|
||
.foot .sep{margin:0 12px;color:var(--dim2)}
|
||
|
||
@media(max-width:640px){
|
||
.hero h1{font-size:30px;letter-spacing:8px}
|
||
.grid{grid-template-columns:1fr}
|
||
}
|
||
</style>
|
||
</head>
|
||
<body>
|
||
|
||
<canvas id="bg"></canvas>
|
||
|
||
<div class="wrap">
|
||
<div class="hero">
|
||
<div class="dot"></div>
|
||
<h1>光湖 · 开源模块</h1>
|
||
<div class="sub">语言驱动的工具模块集合</div>
|
||
<div class="line"></div>
|
||
</div>
|
||
|
||
<div class="sec-title">已发布模块</div>
|
||
<div class="grid">
|
||
|
||
<!-- MODULE-COVER-001 -->
|
||
<div class="card" onclick="openModule('cover')">
|
||
<span class="tag live">可用</span>
|
||
<div class="icon">🎨</div>
|
||
<div class="name">封面工作室</div>
|
||
<div class="id">MODULE-COVER-001</div>
|
||
<div class="desc">语言驱动的小红书 / 公众号封面生成器。说出你想要什么风格,AI 自动排版渲染。</div>
|
||
<div class="arrow">→</div>
|
||
</div>
|
||
|
||
<!-- 部署入口 -->
|
||
<div class="card repo" onclick="openModule('deploy')">
|
||
<span class="tag" style="background:rgba(160,130,200,.1);color:rgba(190,155,220,.8);border:1px solid rgba(160,130,200,.2)">开发者</span>
|
||
<div class="icon">⚡</div>
|
||
<div class="name">部署模块</div>
|
||
<div class="id">从代码仓库直接部署</div>
|
||
<div class="desc">AI Agent 读取注册表 → 克隆模块代码 → Gatekeeper 临时拉起 → 立即使用。用完释放。</div>
|
||
<div class="arrow">→</div>
|
||
</div>
|
||
|
||
<!-- 即将推出 -->
|
||
<div class="card" style="opacity:.5;cursor:default">
|
||
<span class="tag soon">即将推出</span>
|
||
<div class="icon">🚧</div>
|
||
<div class="name">更多模块</div>
|
||
<div class="id">MODULE-XXX-000</div>
|
||
<div class="desc">新的开源模块正在开发中。关注代码仓库获取最新动态。</div>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
<div class="foot">
|
||
<a href="/code/bingshuo/open-modules" target="_blank">光湖代码仓库</a><span class="sep">·</span>
|
||
<a href="/code/bingshuo/open-modules/src/branch/main/HLDP-PROTOCOL.md" target="_blank">HLDP 协议</a><span class="sep">·</span>
|
||
<span>通感语言核系统编程语言</span>
|
||
<br><br>
|
||
<a href="https://beian.miit.gov.cn/" target="_blank" rel="noopener" style="color:var(--dim2)">陕ICP备2025071211号-1</a>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- Modal: 封面工作室 -->
|
||
<div class="overlay" id="modal-cover">
|
||
<div class="modal">
|
||
<div class="m-icon">🎨</div>
|
||
<div class="m-id">MODULE-COVER-001</div>
|
||
<div class="m-name">封面工作室</div>
|
||
<div class="m-desc">语言驱动的小红书 / 公众号封面生成器。支持多种模板风格,说出你想要的,AI 自动排版渲染。</div>
|
||
|
||
<div class="section">
|
||
<h3>API</h3>
|
||
<div class="code">POST https://guanghulab.com/cover/api/generate
|
||
Content-Type: application/json
|
||
|
||
{
|
||
"text": "你的自然语言描述,比如「粉色治愈风,标题:今天也要开心」",
|
||
"template": "xiaohongshu"
|
||
}</div>
|
||
</div>
|
||
|
||
<div class="section">
|
||
<h3>意图链(AI 推理可见)</h3>
|
||
<div class="intent-chain">
|
||
<div class="intent-step"><span class="s-icon">📝</span><span class="s-step">解析用户意图</span><span class="s-why">识别风格关键词、配色偏好</span></div>
|
||
<div class="intent-step"><span class="s-icon">🎯</span><span class="s-step">匹配模板</span><span class="s-why">从模板库中选择最佳匹配</span></div>
|
||
<div class="intent-step"><span class="s-icon">🎨</span><span class="s-step">渲染封面</span><span class="s-why">排版文字、配色、背景图</span></div>
|
||
<div class="intent-step"><span class="s-icon">✅</span><span class="s-step">输出结果</span><span class="s-why">返回图片 URL + 设计编号</span></div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="btns">
|
||
<a href="/cover/" class="btn-go" target="_blank">打开封面工作室 →</a>
|
||
<button class="btn-close" onclick="closeModal('cover')">关闭</button>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- Modal: 部署模块 -->
|
||
<div class="overlay" id="modal-deploy">
|
||
<div class="modal">
|
||
<div class="m-icon">⚡</div>
|
||
<div class="m-id">语言驱动操作系统部署流程</div>
|
||
<div class="m-name">从代码仓库直接部署</div>
|
||
<div class="m-desc">AI Agent 接入 HLDP 协议后,可以读取模块注册表,克隆任意模块代码,通过 Gatekeeper 在服务器上临时拉起进程。用完释放,无需常驻。</div>
|
||
|
||
<div class="section">
|
||
<h3>AI Agent 接入流程</h3>
|
||
<div class="intent-chain">
|
||
<div class="intent-step"><span class="s-icon">📖</span><span class="s-step">读取 WELCOME.md</span><span class="s-why">了解光湖世界规则</span></div>
|
||
<div class="intent-step"><span class="s-icon">📋</span><span class="s-step">读取模块注册表</span><span class="s-why">发现可用模块和编号</span></div>
|
||
<div class="intent-step"><span class="s-icon">📦</span><span class="s-step">克隆模块代码</span><span class="s-why">从代码仓库 git clone</span></div>
|
||
<div class="intent-step"><span class="s-icon">🚀</span><span class="s-step">Gatekeeper 临时拉起</span><span class="s-why">在服务器上部署运行</span></div>
|
||
<div class="intent-step"><span class="s-icon">🔄</span><span class="s-step">用完释放</span><span class="s-why">进程终止,模块回到仓库</span></div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="btns">
|
||
<a href="/code/bingshuo/open-modules" class="btn-go" target="_blank">打开代码仓库 →</a>
|
||
<button class="btn-close" onclick="closeModal('deploy')">关闭</button>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<script>
|
||
// ── 背景粒子 ──
|
||
(function(){
|
||
var c=document.getElementById('bg'),ctx=c.getContext('2d'),w,h,ps=[];
|
||
function R(){w=c.width=window.innerWidth;h=c.height=window.innerHeight}
|
||
window.addEventListener('resize',R);R();
|
||
for(var i=0;i<60;i++)ps.push({x:Math.random()*w,y:Math.random()*h,r:Math.random()*1.5+.3,vx:(Math.random()-.5)*.15,vy:(Math.random()-.5)*.15-.1,o:Math.random()*.3+.05});
|
||
function D(){
|
||
ctx.clearRect(0,0,w,h);
|
||
for(var i=0;i<ps.length;i++){
|
||
var p=ps[i];
|
||
p.x+=p.vx;p.y+=p.vy;
|
||
if(p.x<0)p.x=w;if(p.x>w)p.x=0;if(p.y<0)p.y=h;if(p.y>h)p.y=0;
|
||
ctx.beginPath();ctx.arc(p.x,p.y,p.r,0,Math.PI*2);
|
||
ctx.fillStyle='rgba(140,190,240,'+p.o+')';ctx.fill();
|
||
}
|
||
requestAnimationFrame(D);
|
||
}
|
||
D();
|
||
})();
|
||
|
||
function openModule(id){
|
||
document.getElementById('modal-'+id).classList.add('show');
|
||
document.body.style.overflow='hidden';
|
||
}
|
||
function closeModal(id){
|
||
document.getElementById('modal-'+id).classList.remove('show');
|
||
document.body.style.overflow='';
|
||
}
|
||
document.querySelectorAll('.overlay').forEach(function(o){
|
||
o.addEventListener('click',function(e){if(e.target===this){this.classList.remove('show');document.body.style.overflow='';}});
|
||
});
|
||
</script>
|
||
|
||
</body>
|
||
</html>
|