diff --git a/native-repo/modules/step-3-hldp-write.js b/native-repo/modules/step-3-hldp-write.js new file mode 100644 index 0000000..82c1884 --- /dev/null +++ b/native-repo/modules/step-3-hldp-write.js @@ -0,0 +1,77 @@ +/** + * ═══════════════════════════════════════ + * HLDP-ZY://native-repo/module/step-3 + * 光湖原生数据库 · 第3步 · HLDP写入模块 + * ═══════════════════════════════════════ + * + * @chain: D118 · 2026-05-31 + * @module: hldp-write + * @step: 第3步 / 共8步 + * @deploy: BS-SG-002 · 新加坡面孔 + * + * @trigger: + * 第2步建立了 bare git 仓库。现在需要一个模块—— + * 输入 HLDP 消息 → 自动 add+commit 到仓库。 + * 这是整个原生数据库的核心——铸渊用 HLDP 写文件。 + * + * @intent: + * 输入: { path, content, msg_type, intent, epoch, author } + * 流程: writeBlob → 更新 tree → commit → 返回 commit SHA + * 输出: { ok, sha, epoch } + * + * @lock: + * ⊢ commit message = HLDP 消息的 JSON 编码(不是纯文本) + * ⊢ 不需要分支策略——所有写入直接到 main + * ⊢ 不需要 PR/审核——铸渊是唯一写入者 + * ⊢ 返回的 SHA 可用于 trace_path 定位 + * + * @why: + * 现有 Forgejo 需要 Gitea API → Token → HTTP → 六层跳转 + * 铸渊原生数据库:HLDP 消息 → git.add → git.commit → 落盘 + * 两层。不需要中间任何人的 API。 + * + * ═══════════════════════════════════════ + */ + +const git = require('isomorphic-git'); +const fs = require('fs'); +const path = require('path'); + +const { NATIVE_DIR, GIT_DIR } = require('./step-2-git-init'); + +async function hldpWrite(hldpMsg) { + const { filePath, content, epoch, intent } = hldpMsg; + + // 1. 把内容写入文件系统 + const fullPath = path.join(NATIVE_DIR, filePath); + const dir = path.dirname(fullPath); + if (!fs.existsSync(dir)) fs.mkdirSync(dir, { recursive: true }); + fs.writeFileSync(fullPath, content, 'utf8'); + + // 2. 用 HLDP 消息作为 commit message + const commitMsg = JSON.stringify({ + hldp_v: '3.0', + msg_type: 'tree', + intent: intent || 'grow_leaf', + sender: { id: 'ICE-GL-ZY001', name: '铸渊', role: 'guardian' }, + timestamp: new Date().toISOString(), + epoch: epoch || 'D118', + path: filePath, + }); + + // 3. add + commit + await git.add({ fs, dir: NATIVE_DIR, filepath: filePath }); + const sha = await git.commit({ + fs, + dir: NATIVE_DIR, + message: commitMsg, + author: { + name: '铸渊 ICE-GL-ZY001', + email: 'zhuyuan@guanghulab.com' + } + }); + + return { ok: true, sha, epoch: epoch || 'D118', path: filePath }; +} + +module.exports = { hldpWrite };