feat(agents): add ensurePathsExist method to validate and create accessible paths

This commit is contained in:
Vaayne 2025-09-19 18:45:54 +08:00
parent 49f9dff9da
commit 1c2211aefb
3 changed files with 56 additions and 0 deletions

View File

@ -161,6 +161,50 @@ export abstract class BaseService {
return deserialized
}
protected ensurePathsExist(paths?: string[]): void {
if (!paths?.length) {
return
}
for (const rawPath of paths) {
if (!rawPath) {
continue
}
const resolvedPath = path.resolve(rawPath)
let stats: fs.Stats | null = null
try {
if (fs.existsSync(resolvedPath)) {
stats = fs.statSync(resolvedPath)
}
} catch (error) {
logger.warn('Failed to inspect accessible path', {
path: rawPath,
error: error instanceof Error ? error.message : String(error)
})
}
const looksLikeFile =
(stats && stats.isFile()) ||
(!stats && path.extname(resolvedPath) !== '' && !resolvedPath.endsWith(path.sep))
const directoryToEnsure = looksLikeFile ? path.dirname(resolvedPath) : resolvedPath
if (!fs.existsSync(directoryToEnsure)) {
try {
fs.mkdirSync(directoryToEnsure, { recursive: true })
} catch (error) {
logger.error('Failed to create accessible path directory', {
path: directoryToEnsure,
error: error instanceof Error ? error.message : String(error)
})
throw error
}
}
}
}
/**
* Force re-initialization (for development/testing)
*/

View File

@ -43,6 +43,8 @@ export class AgentService extends BaseService {
req.accessible_paths = [defaultPath]
}
this.ensurePathsExist(req.accessible_paths)
const serializedReq = this.serializeJsonFields(req)
const insertData: InsertAgentRow = {
@ -126,6 +128,10 @@ export class AgentService extends BaseService {
}
const now = new Date().toISOString()
if (updates.accessible_paths) {
this.ensurePathsExist(updates.accessible_paths)
}
const serializedUpdates = this.serializeJsonFields(updates)
const updateData: Partial<AgentRow> = {

View File

@ -50,6 +50,8 @@ export class SessionService extends BaseService {
...req
}
this.ensurePathsExist(sessionData.accessible_paths)
const serializedData = this.serializeJsonFields(sessionData)
const insertData: InsertSessionRow = {
@ -168,6 +170,10 @@ export class SessionService extends BaseService {
// We'll skip this validation for now to avoid circular dependencies
const now = new Date().toISOString()
if (updates.accessible_paths) {
this.ensurePathsExist(updates.accessible_paths)
}
const serializedUpdates = this.serializeJsonFields(updates)
const updateData: Partial<SessionRow> = {