78 lines
2.6 KiB
JavaScript
78 lines
2.6 KiB
JavaScript
/**
|
||
* ═══════════════════════════════════════
|
||
* 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 };
|