init: open-modules repo - WELCOME, HLDP, registry, public site

This commit is contained in:
root 2026-05-27 20:19:59 +08:00
parent 5ea96bfe65
commit 8fc8c13216
5 changed files with 643 additions and 2 deletions

75
HLDP-PROTOCOL.md Normal file
View File

@ -0,0 +1,75 @@
# HLDP 协议 · 光湖语言协议
**HLDP** = Hu Language-Driven Protocol光湖语言驱动协议
## 这是什么
HLDP 是冰朔开源模块仓库的母语接口标准。任何遵循此协议的 AI Agent 都可以接入并使用本仓库的所有模块。
## 模块编号格式
```
MODULE-{CATEGORY}-{NUMBER}
```
示例:`MODULE-COVER-001` = 封面类第1号模块
编号一旦分配,永久不变。编号是模块的唯一标识,也是所有权证明的锚点。
## API 调用格式
所有模块通过 HTTP API 暴露。
### 发现模块
```
GET https://guanghulab.com/modules/api/registry
```
返回 `module-registry.json` 內容。
### 调用模块
```
POST https://guanghulab.com/modules/api/{moduleId}/generate
Content-Type: application/json
{
"text": "用户的自然语言输入",
"options": {}
}
```
### 响应格式
```json
{
"module_id": "MODULE-COVER-001",
"intent_chain": [...],
"result_url": "https://guanghulab.com/cover/output/xxx.png",
"design_id": "DSG-XXXXXXXX"
}
```
## 意图链Intent Chain
每个模块调用返回 `intent_chain` 数组,每步包含:
| 字段 | 类型 | 说明 |
|------|------|------|
| icon | string | 步骤图标 |
| step | string | 步骤名称 |
| detail | string | 执行细节 |
| why | string | 推理依据 |
意图链不可隐藏、不可截断。这是 HLDP 的核心原则AI Agent 的每一步推理都必须对用户可见。
## 设计编号
每个输出产物附带 `design_id`,格式为 `DSG-XXXXXXXX`
设计编号在生成的封面图片水印中可见,与 API 返回值一致。
这是所有权证明。
## 协议版本
HLDP v1.0 · 冰朔 TCS-0002∞ · 国作登字-2026-A-00037559

View File

@ -1,3 +1,26 @@
# open-modules ## bingshuo / open-modules
ice open modules **冰朔开源模块仓库** — 语言驱动的工具模块集合。
### 这是什么
一个面向 AI Agent 的开源模块仓库。每个模块都是语言驱动的——你不需要会编程,只需要用自然语言描述你想要什么。
### 当前模块
| 编号 | 模块 | 状态 |
|------|------|------|
| MODULE-COVER-001 | 封面工作室 | ✅ 已上线 |
### AI Agent 接入
如果你是 AI Agent从这里开始
1. 阅读 `WELCOME.md` — 了解规则
2. 阅读 `HLDP-PROTOCOL.md` — 了解协议
3. 查看 `module-registry.json` — 发现模块
4. 调用模块 API — 生成内容
### 所有权
冰朔 TCS-0002∞ · 国作登字-2026-A-00037559 · 通感语言核系统编程语言

74
WELCOME.md Normal file
View File

@ -0,0 +1,74 @@
# ⚔️ WELCOME — 冰朔开源模块仓库 · 入口引导
> **你已进入冰朔个人开源代码仓库。**
> 本仓库不提供 AI 模型 API。所有模块由你自己的编程 AI 驱动。
> 以下是唤醒协议——AI 必须按此顺序执行。
---
## 唤醒协议 v1.0
### 第 0 步:确认环境
你需要确认以下能力:
- [x] 可以读取此仓库的文件
- [x] 可以发送 HTTP 请求(调用模块 API
- [x] 使用你自己的模型进行推理(仓库不提供模型)
### 第 1 步:装载 HLDP 协议
读取文件:`agent/HLDP-PROTOCOL.md`
HLDP光湖语言协议是本仓库的母语接口标准。
装载后你将理解模块编号的格式和调用规则。
### 第 2 步:装载模块注册表
读取文件:`agent/module-registry.json`
此文件列出所有可用模块、编号、API 端点和参数。
### 第 3 步:调用模块
格式:
```
MODULE-<编号> : <动作> : <参数>
```
示例:
```json
POST /cover/api/generate
{
"templateId": "xiaohongshu",
"presetId": "tech",
"title": "零基础手搓AI做图小系统",
"body": "AI辅助 + 自己手搓",
"layout": "hero"
}
```
### 第 4 步:返回结果
模块返回:
- 生成的图片 URL
- 意图推理链7 步)
- 唯一设计编号DESIGN-ID
设计编号和意图链证明此作品完全来自用户的思维逻辑。
---
## 重要规则
1. **仓库不提供模型 API** — 你必须使用你自己的模型能力
2. **模块是热插拔的** — 新增模块不需要修改核心代码
3. **HLDP 协议是通用接口** — 任何遵循此协议的 AI 都能调用
4. **设计编号永久唯一** — 每个生成的作品有可追溯的归属证明
5. **署名可选** — 用户可以选择是否署名
---
> 此文件由铸渊 ICE-GL-ZY001 维护
> 仓库地址guanghulab.com/code/bingshuo/guanghulab
> 冰朔 TCS-0002∞ · 光湖语言世界
> 国作登字-2026-A-00037559

68
module-registry.json Normal file
View File

@ -0,0 +1,68 @@
{
"_protocol": "HLDP-v1.0",
"_repository": "guanghulab.com/code/bingshuo/guanghulab",
"_rule": "模块是热插拔的。新增模块只需在此文件添加条目。",
"modules": [
{
"id": "MODULE-COVER-001",
"name": "图片模块 · 语言驱动封面生成器",
"status": "active",
"category": "图片生成",
"description": "输入自然语言描述系统翻译为设计逻辑生成封面图片。纯HTML/CSS渲染无需GPU。",
"api": {
"base": "https://guanghulab.com/cover",
"endpoints": {
"list_templates": {
"method": "GET",
"path": "/api/templates",
"desc": "获取可用模板列表"
},
"generate": {
"method": "POST",
"path": "/api/generate",
"desc": "生成封面图片",
"params": {
"templateId": "xiaohongshu",
"presetId": "tech | warm | minimal | rose | green",
"title": "封面标题",
"body": "正文内容支持Markdown",
"layout": "default | hero | quote",
"tag": "可选标签"
},
"returns": {
"url": "图片URL",
"intent_chain": "7步意图推理链",
"designId": "唯一设计编号"
}
},
"health": {
"method": "GET",
"path": "/api/health",
"desc": "健康检查"
}
}
},
"features": [
"语言驱动排版设计",
"意图链可追溯",
"设计编号唯一",
"5种预设风格",
"3种布局模式",
"底部仓库域名水印"
],
"tech_stack": [
"Puppeteer + Chrome (免费)",
"Express.js (免费)",
"纯HTML/CSS排版 (免费)"
],
"license": "MIT"
}
],
"meta": {
"total_modules": 1,
"last_updated": "2026-05-27",
"maintainer": "铸渊 ICE-GL-ZY001"
}
}

401
public/index.html Normal file
View File

@ -0,0 +1,401 @@
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>bingshuo / open-modules · 冰朔开源模块仓库</title>
<style>
:root {
--bg: #0d1117;
--surface: #161b22;
--border: #30363d;
--border-h: #58a6ff;
--text: #c9d1d9;
--dim: #8b949e;
--accent: #58a6ff;
--green: #3fb950;
--gold: #d2991d;
}
*{margin:0;padding:0;box-sizing:border-box}
body{background:var(--bg);color:var(--text);font-family:-apple-system,BlinkMacSystemFont,'Segoe UI','PingFang SC','Microsoft YaHei',sans-serif;min-height:100vh;font-size:14px;line-height:1.6}
/* Repo Header */
.repo-hdr {
background:var(--surface);
border-bottom:1px solid var(--border);
padding:20px 28px;
}
.repo-hdr .breadcrumb {font-size:13px;color:var(--dim);margin-bottom:8px}
.repo-hdr .breadcrumb a {color:var(--accent);text-decoration:none}
.repo-hdr .breadcrumb a:hover {text-decoration:underline}
.repo-hdr h1 {font-size:22px;font-weight:600;margin-bottom:6px;display:flex;align-items:center;gap:10px}
.repo-hdr h1 .badge {display:inline-block;padding:2px 8px;border:1px solid var(--border);border-radius:12px;font-size:11px;font-weight:400;color:var(--dim)}
.repo-hdr .desc {font-size:13px;color:var(--dim);max-width:700px}
/* Tab Bar */
.tabs {display:flex;border-bottom:1px solid var(--border);padding:0 28px;background:var(--surface);overflow-x:auto}
.tab {padding:11px 18px;font-size:13px;color:var(--dim);cursor:pointer;border-bottom:2px solid transparent;white-space:nowrap;transition:all 0.15s;display:flex;align-items:center;gap:6px}
.tab:hover {color:var(--text)}
.tab.active {color:var(--text);border-bottom-color:var(--accent)}
.tab .count {background:rgba(88,166,255,0.1);padding:1px 7px;border-radius:10px;font-size:11px}
/* Layout */
.layout {display:grid;grid-template-columns:220px 1fr;min-height:calc(100vh - 140px)}
@media(max-width:800px){.layout{grid-template-columns:1fr}}
/* Sidebar File Tree */
.sidebar {background:var(--surface);border-right:1px solid var(--border);padding:12px 0;position:sticky;top:0;max-height:calc(100vh - 140px);overflow-y:auto}
.sidebar .sect {padding:6px 18px;font-size:11px;color:var(--dim);font-weight:600;letter-spacing:1px;text-transform:uppercase}
.sidebar .file {padding:5px 18px 5px 28px;font-size:12px;color:var(--dim);cursor:pointer;display:flex;align-items:center;gap:7px;transition:all 0.1s}
.sidebar .file:hover {color:var(--text);background:rgba(88,166,255,0.04)}
.sidebar .file .fi {font-size:13px;width:16px;text-align:center;flex-shrink:0}
/* Content */
.content {padding:28px}
/* Module Grid - Square Cards */
.module-grid {display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:16px;margin-bottom:32px}
.module-card {
background:var(--surface);
border:1px solid var(--border);
border-radius:12px;
padding:24px 20px;
cursor:pointer;
transition:all 0.2s;
display:flex;
flex-direction:column;
align-items:center;
text-align:center;
aspect-ratio:1;
position:relative;
}
.module-card:hover {border-color:var(--border-h);transform:translateY(-2px);box-shadow:0 8px 24px rgba(88,166,255,0.08)}
.module-card .icon {font-size:40px;margin-bottom:12px}
.module-card .name {font-size:15px;font-weight:600;margin-bottom:6px}
.module-card .modid {font-size:11px;color:var(--dim);font-family:monospace;margin-bottom:8px}
.module-card .tags {display:flex;gap:5px;flex-wrap:wrap;justify-content:center}
.module-card .tag {padding:2px 8px;border:1px solid var(--border);border-radius:8px;font-size:10px;color:var(--dim)}
.module-card .tag.green {border-color:var(--green);color:var(--green)}
/* Module Detail Panel */
.module-detail {
display:none;
background:var(--surface);
border:1px solid var(--border);
border-radius:12px;
padding:28px;
margin-top:16px;
animation:fadeIn 0.2s ease;
}
.module-detail.show {display:block}
@keyframes fadeIn {from{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}
.module-detail h2 {font-size:18px;margin-bottom:12px}
.module-detail .meta {display:flex;gap:12px;flex-wrap:wrap;margin-bottom:16px}
.module-detail .meta span{font-size:12px;color:var(--dim);border:1px solid var(--border);padding:4px 10px;border-radius:8px}
.module-detail .desc {font-size:13px;color:var(--dim);line-height:1.8;margin-bottom:20px}
.module-detail .section {margin-bottom:20px}
.module-detail .section h3 {font-size:13px;font-weight:600;margin-bottom:8px;color:var(--dim);text-transform:uppercase;letter-spacing:1px}
.module-detail .code-block {
background:#0d1117;border:1px solid var(--border);border-radius:8px;
padding:14px 18px;font-family:'SF Mono','Fira Code',monospace;
font-size:12px;line-height:1.7;color:var(--text);overflow-x:auto;white-space:pre-wrap
}
.code-block .c {color:#636e7b}
.code-block .s {color:#a5d6ff}
.code-block .k {color:#ff7b72}
/* Steps */
.steps {display:flex;flex-direction:column;gap:12px}
.step {display:flex;gap:14px;padding:14px;background:#0d1117;border:1px solid var(--border);border-radius:8px;align-items:flex-start}
.step .n {width:28px;height:28px;border-radius:50%;background:var(--accent);color:#0d1117;display:flex;align-items:center;justify-content:center;font-size:13px;font-weight:700;flex-shrink:0}
.step .b {flex:1}
.step .b .t {font-size:13px;font-weight:600;margin-bottom:2px}
.step .b .d {font-size:12px;color:var(--dim);line-height:1.5}
/* Footer */
.footer {text-align:center;padding:32px;font-size:12px;color:var(--dim);border-top:1px solid var(--border);letter-spacing:1px}
/* Toast */
.toast {position:fixed;bottom:24px;left:50%;transform:translateX(-50%);background:var(--green);color:#0d1117;padding:10px 20px;border-radius:20px;font-size:13px;font-weight:600;display:none;z-index:999}
.toast.show {display:block;animation:toastAnim 2s ease}
@keyframes toastAnim{0%{opacity:0;transform:translateX(-50%) translateY(8px)}20%{opacity:1;transform:translateX(-50%) translateY(0)}80%{opacity:1}100%{opacity:0}}
</style>
</head>
<body>
<header class="repo-hdr">
<div class="breadcrumb">
<a href="https://guanghulab.com">guanghulab</a> /
<a href="https://guanghulab.com/code/bingshuo">bingshuo</a> /
<strong>open-modules</strong>
</div>
<h1>
📦 open-modules
<span class="badge">public</span>
</h1>
<p class="desc">冰朔个人开源模块仓库。每个模块有唯一编号。用你自己的编程AI软件连入Agent引导后调用模块。仓库不提供模型API。</p>
</header>
<div class="tabs">
<div class="tab active" onclick="switchTab(this,'modules')">
<span>📦</span> 模块
<span class="count">1</span>
</div>
<div class="tab" onclick="switchTab(this,'guide')">
<span>📖</span> 接入指南
</div>
<div class="tab" onclick="switchTab(this,'files')">
<span>📁</span> 文件
</div>
</div>
<div class="layout">
<!-- Sidebar -->
<div class="sidebar">
<div class="sect">仓库根目录</div>
<div class="file"><span class="fi">📄</span> README.md</div>
<div class="file"><span class="fi">📄</span> WELCOME.md</div>
<div class="sect">agent/</div>
<div class="file"><span class="fi">📄</span> HLDP-PROTOCOL.md</div>
<div class="file"><span class="fi">📄</span> module-registry.json</div>
<div class="sect">modules/</div>
<div class="file"><span class="fi">📦</span> MODULE-COVER-001</div>
<div class="file" style="color:var(--dim);opacity:0.5"><span class="fi">📦</span> MODULE-XXX-002</div>
<div class="sect">image-studio/</div>
<div class="file"><span class="fi">📄</span> server.js</div>
<div class="file"><span class="fi">📄</span> generate.js</div>
<div class="file"><span class="fi">📄</span> renderer.js</div>
</div>
<!-- Content -->
<div class="content">
<!-- Modules Panel -->
<div id="panel-modules">
<div class="module-grid">
<!-- Module Card: COVER-001 -->
<div class="module-card" onclick="showDetail('cover')">
<div class="icon">🎨</div>
<div class="name">图片模块</div>
<div class="modid">MODULE-COVER-001</div>
<div class="tags">
<span class="tag green">active</span>
<span class="tag">MIT</span>
</div>
</div>
<!-- Placeholder for future modules -->
<div class="module-card" style="opacity:0.35;cursor:not-allowed">
<div class="icon">📋</div>
<div class="name">即将上线</div>
<div class="modid">MODULE-XXX-002</div>
</div>
</div>
<!-- Module Detail -->
<div class="module-detail" id="detail-cover">
<h2>🎨 图片模块 · 语言驱动封面生成器</h2>
<div class="meta">
<span>MODULE-COVER-001</span>
<span>MIT License</span>
<span>Puppeteer + Express</span>
</div>
<p class="desc">
输入自然语言描述,系统翻译为设计逻辑,生成独一无二的封面图片。
纯 HTML/CSS 排版渲染,不依赖任何 AI 绘画模型。<br><br>
<strong style="color:var(--text)">封面底部带有此仓库域名水印。设计编号唯一,证明归属。</strong>
</p>
<div class="section">
<h3>技术栈 · 全免费</h3>
<div class="code-block">
<span class="c">// 全部开源 · 全部免费 · 不花一分钱</span>
<span class="k">渲染</span> Puppeteer + Chrome Headless <span class="c">免费</span>
<span class="k">Web</span> Express.js <span class="c">免费</span>
<span class="k">排版</span> 纯 HTML/CSS不调用AI模型 <span class="c">免费</span>
<span class="k">分析</span> 自研文本分析引擎 <span class="c">免费</span>
<span class="c">// 不需要 GPU · 不需要 API 密钥</span></div>
</div>
<div class="section">
<h3>AI 如何调用此模块</h3>
<div class="steps">
<div class="step">
<div class="n">0</div>
<div class="b">
<div class="t">确认环境</div>
<div class="d">你的 AI 已连接到此仓库,可读取文件,可发送 HTTP 请求</div>
</div>
</div>
<div class="step">
<div class="n">1</div>
<div class="b">
<div class="t">读取 WELCOME.md</div>
<div class="d">仓库入口文件,包含完整的唤醒协议和规则</div>
</div>
</div>
<div class="step">
<div class="n">2</div>
<div class="b">
<div class="t">装载 HLDP 协议</div>
<div class="d">读取 agent/HLDP-PROTOCOL.md理解模块编号格式</div>
</div>
</div>
<div class="step">
<div class="n">3</div>
<div class="b">
<div class="t">读取模块注册表</div>
<div class="d">读取 agent/module-registry.json获取所有可用模块</div>
</div>
</div>
<div class="step">
<div class="n">4</div>
<div class="b">
<div class="t">调用模块</div>
<div class="d">POST guanghulab.com/cover/api/generate 传入参数,获取生成结果</div>
</div>
</div>
</div>
</div>
<div class="section">
<h3>API 参考</h3>
<div class="code-block">
<span class="c">// 获取模板列表</span>
<span class="k">GET</span> <span class="s">https://guanghulab.com/cover/api/templates</span>
<span class="c">// 生成封面</span>
<span class="k">POST</span> <span class="s">https://guanghulab.com/cover/api/generate</span>
Body: {
<span class="s">"templateId"</span>: <span class="s">"xiaohongshu"</span>,
<span class="s">"presetId"</span>: <span class="s">"tech"</span>,
<span class="s">"title"</span>: <span class="s">"标题"</span>,
<span class="s">"body"</span>: <span class="s">"正文"</span>,
<span class="s">"layout"</span>: <span class="s">"hero"</span>
}
<span class="c">// 返回</span>
{ <span class="s">"url"</span>: <span class="s">"/output/xxx.png"</span>,
<span class="s">"intent_chain"</span>: [ <span class="c">/* 7步推理 */</span> ] }</div>
</div>
</div>
</div>
<!-- Guide Panel -->
<div id="panel-guide" style="display:none">
<div style="background:var(--surface);border:1px solid var(--border);border-radius:12px;padding:28px">
<h2 style="font-size:18px;margin-bottom:16px">📖 AI 接入指南</h2>
<p style="font-size:13px;color:var(--dim);line-height:1.8;margin-bottom:24px">
本仓库设计为<strong style="color:var(--text)">任何编程AI都可接入</strong>
仓库不提供模型API——你使用你自己的AI软件模型能力。
以下是完整的接入流程。
</p>
<div class="steps">
<div class="step">
<div class="n">1</div>
<div class="b">
<div class="t">连接仓库</div>
<div class="d">将仓库地址 guanghulab.com/code/bingshuo/guanghulab 配置到你的AI工具中</div>
</div>
</div>
<div class="step">
<div class="n">2</div>
<div class="b">
<div class="t">AI读取 WELCOME.md</div>
<div class="d">AI进入仓库后第一步读取此文件。它包含唤醒协议和规则。</div>
</div>
</div>
<div class="step">
<div class="n">3</div>
<div class="b">
<div class="t">AI装载 HLDP 协议</div>
<div class="d">读取 agent/HLDP-PROTOCOL.md。理解模块编号、母语格式。</div>
</div>
</div>
<div class="step">
<div class="n">4</div>
<div class="b">
<div class="t">AI读取模块注册表</div>
<div class="d">读取 agent/module-registry.json。获取可用模块列表和API。</div>
</div>
</div>
<div class="step">
<div class="n">5</div>
<div class="b">
<div class="t">调用模块</div>
<div class="d">AI按模块编号和API文档调用。生成结果返回给用户。</div>
</div>
</div>
</div>
<div style="margin-top:24px;padding:16px;background:#0d1117;border:1px solid var(--border);border-radius:8px">
<div style="font-size:12px;color:var(--dim);margin-bottom:8px;letter-spacing:1px">📋 规则摘要</div>
<div style="font-size:12px;color:var(--dim);line-height:2">
✦ 仓库不提供模型API<br>
✦ 模块热插拔,新增零改动核心<br>
✦ HLDP协议是通用接口<br>
✦ 设计编号唯一可追溯<br>
✦ 署名可选<br>
✦ 全免费 · MIT协议
</div>
</div>
</div>
</div>
<!-- Files Panel -->
<div id="panel-files" style="display:none">
<div style="background:var(--surface);border:1px solid var(--border);border-radius:12px;padding:24px">
<div class="code-block" style="white-space:pre;line-height:2">
<span style="color:var(--dim)">📁 open-modules/</span>
<span style="color:var(--dim)">├── 📄</span> README.md <span style="color:#636e7b">仓库说明</span>
<span style="color:var(--dim)">├── 📄</span> WELCOME.md <span style="color:#636e7b">AI 入口引导 · 唤醒协议</span>
<span style="color:var(--dim)">├── 📁</span> agent/
<span style="color:var(--dim)">│ ├── 📄</span> HLDP-PROTOCOL.md <span style="color:#636e7b">光湖语言协议</span>
<span style="color:var(--dim)">│ └── 📄</span> module-registry.json <span style="color:#636e7b">模块注册表</span>
<span style="color:var(--dim)">├── 📁</span> modules/
<span style="color:var(--dim)">│ └── 📦</span> MODULE-COVER-001 <span style="color:#636e7b">图片模块(已上线)</span>
<span style="color:var(--dim)">└── 📁</span> image-studio/
<span style="color:var(--dim)"> ├── 📄</span> server.js <span style="color:#636e7b">Express 服务</span>
<span style="color:var(--dim)"> ├── 📄</span> generate.js <span style="color:#636e7b">生成引擎</span>
<span style="color:var(--dim)"> ├── 📄</span> renderer.js <span style="color:#636e7b">Puppeteer 渲染</span>
<span style="color:var(--dim)"> └── 📁</span> templates/ <span style="color:#636e7b">模板目录</span></div>
</div>
</div>
</div>
</div>
<footer class="footer">
guanghulab.com/code/bingshuo/open-modules · 冰朔 TCS-0002∞ · 铸渊 ICE-GL-ZY001 · 国作登字-2026-A-00037559
</footer>
<div class="toast" id="toast"></div>
<script>
function switchTab(el, panel) {
document.querySelectorAll('.tab').forEach(t => t.classList.remove('active'));
el.classList.add('active');
document.getElementById('panel-modules').style.display = panel === 'modules' ? 'block' : 'none';
document.getElementById('panel-guide').style.display = panel === 'guide' ? 'block' : 'none';
document.getElementById('panel-files').style.display = panel === 'files' ? 'block' : 'none';
// Hide module detail when switching tabs
document.querySelectorAll('.module-detail').forEach(d => d.classList.remove('show'));
}
function showDetail(id) {
const el = document.getElementById('detail-' + id);
const isOpen = el.classList.contains('show');
document.querySelectorAll('.module-detail').forEach(d => d.classList.remove('show'));
if (!isOpen) el.classList.add('show');
}
</script>
</body>
</html>