Files
tkmind_go/ui/h5/scripts/mindspace-rebuild-thumbnails.mjs
john 4e21ca937a
Deploy Documentation / deploy (push) Has been cancelled
Canary / Prepare Version (push) Has been cancelled
Canary / build-cli (push) Has been cancelled
Canary / Upload Install Script (push) Has been cancelled
Canary / bundle-desktop (push) Has been cancelled
Canary / bundle-desktop-intel (push) Has been cancelled
Canary / bundle-desktop-linux (push) Has been cancelled
Canary / bundle-desktop-windows (push) Has been cancelled
Canary / bundle-desktop-windows-cuda (push) Has been cancelled
Canary / Release (push) Has been cancelled
Unused Dependencies / machete (push) Has been cancelled
CI / changes (push) Has been cancelled
CI / Check Rust Code Format (push) Has been cancelled
CI / Build and Test Rust Project (push) Has been cancelled
CI / Build Rust Project on Windows (push) Has been cancelled
CI / Check MSRV (push) Has been cancelled
CI / Lint Rust Code (push) Has been cancelled
CI / Check Generated Schemas are Up-to-Date (push) Has been cancelled
CI / Test and Lint Electron Desktop App (push) Has been cancelled
CI / H5 Plaza Tests and Build (push) Has been cancelled
Live Provider Tests / check-fork (push) Has been cancelled
Live Provider Tests / changes (push) Has been cancelled
Live Provider Tests / Build Binary (push) Has been cancelled
Live Provider Tests / Smoke Tests (push) Has been cancelled
Live Provider Tests / Smoke Tests (Code Execution) (push) Has been cancelled
Live Provider Tests / Compaction Tests (push) Has been cancelled
Live Provider Tests / goose server HTTP integration tests (push) Has been cancelled
Publish Ask AI Bot Docker Image / docker (push) Has been cancelled
Publish Docker Image / docker (push) Has been cancelled
Scorecard supply-chain security / Scorecard analysis (push) Has been cancelled
Add TKMind platform extensions, H5/MindSpace stack, and deployment tooling.
Fork goose with custom MCP widgets, platform extensions (aider, git, web, search),
MindSpace H5 backend/frontend, Plaza/Ops UIs, and deploy scripts for tkmind.cn.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-14 21:30:20 +08:00

71 lines
2.5 KiB
JavaScript

#!/usr/bin/env node
import fs from 'node:fs/promises';
import path from 'node:path';
import { fileURLToPath } from 'node:url';
import { loadH5Environment } from './load-env.mjs';
import { createDbPool } from '../db.mjs';
import {
ensureHtmlThumbnail,
pageThumbnailKey,
assetThumbnailKey,
} from '../mindspace-thumbnails.mjs';
const root = path.join(path.dirname(fileURLToPath(import.meta.url)), '..');
loadH5Environment(path.dirname(fileURLToPath(import.meta.url)));
const storageRoot = process.env.MINDSPACE_STORAGE_ROOT
? path.resolve(process.env.MINDSPACE_STORAGE_ROOT)
: path.join(root, 'data', 'mindspace');
async function rebuildPageThumbnails(pool) {
const [rows] = await pool.query(
`SELECT p.id AS page_id, p.user_id, p.title, p.summary, p.page_type, pv.version_no, av.storage_key
FROM h5_page_records p
JOIN h5_page_versions pv ON pv.id = p.current_version_id
JOIN h5_asset_versions av ON av.asset_id = pv.content_asset_id AND av.version_no = 1
WHERE p.status <> 'deleted' AND p.page_type = 'html'`,
);
let rebuilt = 0;
for (const row of rows) {
const content = await fs.readFile(path.join(storageRoot, row.storage_key), 'utf8');
await ensureHtmlThumbnail(storageRoot, pageThumbnailKey(row.user_id, row.page_id), content, {
title: row.title,
subtitle: row.summary || `草稿 v${row.version_no}`,
tag: '网页',
contentStorageKey: row.storage_key,
});
rebuilt += 1;
}
return rebuilt;
}
async function rebuildAssetThumbnails(pool) {
const [rows] = await pool.query(
`SELECT a.id AS asset_id, a.user_id, a.display_name, c.category_code, av.storage_key
FROM h5_assets a
JOIN h5_space_categories c ON c.id = a.category_id
JOIN h5_asset_versions av ON av.asset_id = a.id AND av.version_no = 1
WHERE a.status <> 'deleted' AND a.mime_type = 'text/html'`,
);
let rebuilt = 0;
for (const row of rows) {
const content = await fs.readFile(path.join(storageRoot, row.storage_key), 'utf8');
await ensureHtmlThumbnail(storageRoot, assetThumbnailKey(row.user_id, row.asset_id), content, {
title: row.display_name,
subtitle: String(row.category_code ?? 'HTML').toUpperCase(),
contentStorageKey: row.storage_key,
});
rebuilt += 1;
}
return rebuilt;
}
const pool = createDbPool();
try {
const pages = await rebuildPageThumbnails(pool);
const assets = await rebuildAssetThumbnails(pool);
console.log(`已重建缩略图:${pages} 个页面,${assets} 个 HTML 资产`);
} finally {
await pool.end();
}