guanghulab/scripts/grid-db/sync-griddb-to-notion.js
Guanghu Domestic Migration d1e47f4565
Some checks are pending
自动更新代码和重启 / update-and-restart (push) Waiting to run
CI检查 + 自动部署 / check (push) Waiting to run
CI检查 + 自动部署 / deploy (push) Blocked by required conditions
重启聊天服务 / restart (push) Waiting to run
chore: import sanitized domestic snapshot for REPO-002
Source snapshot: ca48d3ddf926d79aa138306164169baf764bb829
2026-07-17 15:54:41 +08:00

80 lines
2.5 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* scripts/grid-db/sync-griddb-to-notion.js
*
* Grid-DB → Notion 增量回传脚本
*
* 职责:
* - 检测 grid-db/memory/ 中变更的文件(排除 brain-mirror.json
* - 将 session-context, task-queue, dev-profile, persona-growth 的增量变化回传到 Notion
* - task-queue: 追加制(新任务追加,已有任务只改状态不删除)
* - dev-profile / persona-growth: 只追加不覆盖
*
* 环境变量:
* - NOTION_API_TOKEN: Notion API 密钥
*
* 守护: PER-ZY001 铸渊
* 系统: SYS-GLW-0001
*/
const fs = require('fs');
const path = require('path');
const { execSync } = require('child_process');
const GRID_DB_MEMORY = path.join(__dirname, '../../grid-db/memory');
async function main() {
const notionToken = process.env.NOTION_API_TOKEN;
if (!notionToken) {
console.log('[sync-griddb-to-notion] NOTION_API_TOKEN not set, skipping sync');
return;
}
// Detect changed files (passed from workflow or detect via git diff)
let changedFiles;
try {
// Use GITHUB_SHA context if available, otherwise fall back to HEAD~1
const beforeSha = process.env.BEFORE_SHA || 'HEAD~1';
const diff = execSync(`git diff --name-only ${beforeSha} HEAD -- grid-db/memory/`, { encoding: 'utf8' });
changedFiles = diff.trim().split('\n')
.filter(f => f && !f.includes('brain-mirror.json'));
} catch {
console.log('[sync-griddb-to-notion] No changes detected (git diff failed, possibly first commit or shallow clone)');
return;
}
if (changedFiles.length === 0) {
console.log('[sync-griddb-to-notion] No eligible changes to sync');
return;
}
console.log(`[sync-griddb-to-notion] Processing ${changedFiles.length} changed files:`);
for (const file of changedFiles) {
const fullPath = path.join(__dirname, '../..', file);
if (!fs.existsSync(fullPath)) {
console.log(` [skip] ${file} (deleted)`);
continue;
}
const data = JSON.parse(fs.readFileSync(fullPath, 'utf8'));
const fileName = path.basename(file);
const devDir = path.basename(path.dirname(file));
console.log(` [sync] ${devDir}/${fileName}`);
// TODO: Implement actual Notion API write
// - session-context.json → update Notion page property
// - task-queue.json → append/update tasks in Notion database
// - dev-profile.json → append growth data
// - persona-growth.json → append adaptation log
}
console.log('[sync-griddb-to-notion] Sync complete');
}
main().catch(err => {
console.error('[sync-griddb-to-notion] Error:', err.message);
process.exit(1);
});