u
This commit is contained in:
@@ -2,7 +2,7 @@ import fs from 'fs';
|
||||
import path from 'path';
|
||||
import { getStore } from '../db/store.js';
|
||||
import env from '../config/env.js';
|
||||
import { isSkillPath, getDefaultSkills } from './skill.js';
|
||||
import { getDefaultSkills } from './skill.js';
|
||||
|
||||
const FULL_HASH_REGEX = /^[a-fA-F0-9]{64}$/;
|
||||
const VIRTUAL_IMAGE_FOLDERS = new Set(['image', 'images']);
|
||||
@@ -135,7 +135,7 @@ export async function loadDefaultSkills({ googleAuthId, store: passedStore, vfsR
|
||||
}
|
||||
|
||||
/**
|
||||
* Initializes the VFS for the selected company with default SKILL files and marks it initialized.
|
||||
* Initializes the VFS for the selected company with default SKILL files.
|
||||
*
|
||||
* @param {{ googleAuthId: number, store?: object, vfsRoot?: string }} ctx
|
||||
* @returns {Promise<string>} vfsRoot directory path
|
||||
@@ -146,23 +146,11 @@ export async function initCompanyVfs({ googleAuthId, store: passedStore, vfsRoot
|
||||
fs.mkdirSync(vfsRoot, { recursive: true });
|
||||
|
||||
await loadDefaultSkills({ googleAuthId, store, vfsRoot });
|
||||
|
||||
try {
|
||||
await store.modelvfs.write(googleAuthId, {
|
||||
name: '.vfs_initialized',
|
||||
mime: 'text/plain',
|
||||
content: Buffer.from('1', 'utf8'),
|
||||
});
|
||||
} catch (err) {
|
||||
console.warn('[vfs] failed to mark .vfs_initialized in modelvfs:', err.message);
|
||||
}
|
||||
|
||||
return vfsRoot;
|
||||
}
|
||||
|
||||
/**
|
||||
* Ensure the local directory for this company's VFS exists and is hydrated from modelvfs.
|
||||
* If the company has no initialized VFS and no skills yet, loads default skills automatically.
|
||||
*
|
||||
* @param {{ googleAuthId: number }} ctx
|
||||
* @returns {Promise<string>} vfsRoot directory path
|
||||
@@ -173,25 +161,8 @@ export async function prepareVfs({ googleAuthId }) {
|
||||
fs.mkdirSync(vfsRoot, { recursive: true });
|
||||
|
||||
try {
|
||||
let files = await store.modelvfs.list(googleAuthId);
|
||||
const hasInitMarker = files.some((f) => f.name === '.vfs_initialized');
|
||||
const hasAnySkills = files.some((f) => isSkillPath(f.name));
|
||||
|
||||
if (!hasInitMarker && !hasAnySkills) {
|
||||
await initCompanyVfs({ googleAuthId, store, vfsRoot });
|
||||
files = await store.modelvfs.list(googleAuthId);
|
||||
} else if (!hasInitMarker) {
|
||||
try {
|
||||
await store.modelvfs.write(googleAuthId, {
|
||||
name: '.vfs_initialized',
|
||||
mime: 'text/plain',
|
||||
content: Buffer.from('1', 'utf8'),
|
||||
});
|
||||
} catch { /* ignore */ }
|
||||
}
|
||||
|
||||
const files = await store.modelvfs.list(googleAuthId);
|
||||
for (const file of files) {
|
||||
if (file.name.startsWith('.')) continue;
|
||||
const diskPath = path.resolve(vfsRoot, file.name);
|
||||
if (!diskPath.startsWith(vfsRoot)) continue;
|
||||
if (!fs.existsSync(diskPath)) {
|
||||
@@ -210,6 +181,7 @@ export async function prepareVfs({ googleAuthId }) {
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Syncs any modified or newly written files from the disk vfsRoot back to the modelvfs table.
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user