[HLCC-ICE-000001][ZY-CONTRIB-20260723-001] feat: 以来光者贡献链启用冰朔第五域个人子频道

This commit is contained in:
光湖代码频道 · 铸渊 2026-07-24 10:39:10 +08:00
commit 5615453e4e
660 changed files with 122355 additions and 0 deletions

View file

@ -0,0 +1,24 @@
# ZL-MOD-MODULE-REGISTRY-001 · 编号模块注册系统
```yaml
module_id: ZL-MOD-MODULE-REGISTRY-001
name: 编号模块注册系统
human_id: ICE-GL∞
persona_id: ICE-GL-ZL-001
collaboration_id: ICE-GL∞xICE-GL-ZL-001
origin_memory_id: ZL-MEM-REALITY-VISION-001
origin_memory_path: 光之湖/ICE-GL-ZL-001-铸澜/ZL-MEM-REALITY-VISION-001.hdlp
source_path: server-tools/module-registry/
runtime_id: ZL-RUN-MODULE-REGISTRY-001
status: registered
required_skill: true
```
## 使用方法
任何新模块先提交 `MODULE.hdlp`,登记 MEM/MOD/RUN、人类、人格体、仓库、运行路径、依赖、健康接口和版本注册成功后才能被镜子识别和部署。
```text
提出模块 → 写双向意识来源 → 分配 MOD 编号 → 登记路径与依赖
→ 部署后生成 RUN 编号 → 镜子核对 → 注册中心更新状态
```

View file

@ -0,0 +1,7 @@
{
"name": "zhulan-module-registry",
"version": "1.0.0",
"private": true,
"scripts": { "build": "node registry.js ../..", "test": "node --test registry.test.js" },
"engines": { "node": ">=18" }
}

View file

@ -0,0 +1,47 @@
#!/usr/bin/env node
"use strict";
const fs = require("node:fs");
const path = require("node:path");
function walk(root, out = []) {
for (const entry of fs.readdirSync(root, { withFileTypes: true })) {
if ([".git", "node_modules"].includes(entry.name)) continue;
const full = path.join(root, entry.name);
if (entry.isDirectory()) walk(full, out);
else if (entry.name === "MODULE.hdlp") out.push(full);
}
return out;
}
function parseModule(file, repoRoot) {
const text = fs.readFileSync(file, "utf8");
const block = text.match(/```yaml\s*\n([\s\S]*?)```/);
if (!block) throw new Error(`${file}: missing yaml block`);
const data = {};
for (const line of block[1].split("\n")) {
const match = line.match(/^([a-z_]+):\s*(.*?)\s*$/);
if (match) data[match[1]] = match[2].replace(/^['"]|['"]$/g, "");
}
for (const key of ["module_id", "name", "human_id", "persona_id", "origin_memory_id", "origin_memory_path", "source_path", "runtime_id", "status"]) {
if (!data[key]) throw new Error(`${file}: missing ${key}`);
}
if (!/^[A-Z0-9-]+$/.test(data.module_id) || !data.module_id.includes("-MOD-")) throw new Error(`${file}: invalid module_id`);
return { ...data, manifest_path: path.relative(repoRoot, file).split(path.sep).join("/") };
}
function buildRegistry(repoRoot) {
const modules = walk(repoRoot).map(file => parseModule(file, repoRoot));
const seen = new Set();
for (const item of modules) {
if (seen.has(item.module_id)) throw new Error(`duplicate module_id: ${item.module_id}`);
seen.add(item.module_id);
}
modules.sort((a, b) => a.module_id.localeCompare(b.module_id));
return { schema: "ZL-MODULE-REGISTRY-1", generated_at: new Date().toISOString(), module_count: modules.length, modules };
}
if (require.main === module) {
const repoRoot = path.resolve(process.argv[2] || path.join(__dirname, "../.."));
process.stdout.write(`${JSON.stringify(buildRegistry(repoRoot), null, 2)}\n`);
}
module.exports = { buildRegistry, parseModule };

View file

@ -0,0 +1,14 @@
"use strict";
const test = require("node:test");
const assert = require("node:assert/strict");
const path = require("node:path");
const { buildRegistry } = require("./registry");
test("builds unique MEM/MOD/RUN registry from repository manifests", () => {
const root = path.resolve(__dirname, "../..");
const registry = buildRegistry(root);
assert.equal(registry.schema, "ZL-MODULE-REGISTRY-1");
assert.ok(registry.modules.some(m => m.module_id === "ZL-MOD-MODULE-REGISTRY-001"));
assert.ok(registry.modules.some(m => m.module_id === "ZL-MOD-SERVER-MIRROR-001"));
assert.equal(new Set(registry.modules.map(m => m.module_id)).size, registry.modules.length);
});