mirror of
https://github.com/NousResearch/hermes-agent.git
synced 2026-07-31 19:16:29 +00:00
Sixth main.cjs cluster peel. The hermes:setting:defaultProjectDir:get/set/pick
handlers + hermes:workspace:sanitize move verbatim into
electron/project-dir-ipc.cjs behind a registerProjectDirIpc({ ipcMain,
readDefaultProjectDir, writeDefaultProjectDir, resolveHermesCwd,
sanitizeWorkspaceCwd }) registrar. The config readers/writers + cwd resolvers stay
in the main process and are injected.
Channel names unchanged → preload + renderer untouched. Adds
electron/project-dir-ipc.test.cjs (surface + set/sanitize behavior; get/pick touch
Electron app/dialog and are exercised in-app only).
55 lines
1.6 KiB
JavaScript
55 lines
1.6 KiB
JavaScript
'use strict'
|
|
|
|
const { app, dialog } = require('electron')
|
|
const fs = require('fs')
|
|
|
|
// Default-project-directory + workspace-cwd settings IPC: read / write / native
|
|
// directory picker, plus workspace-cwd sanitize. The config readers/writers and
|
|
// cwd resolvers live in the main process and are injected.
|
|
function registerProjectDirIpc({
|
|
ipcMain,
|
|
readDefaultProjectDir,
|
|
resolveHermesCwd,
|
|
sanitizeWorkspaceCwd,
|
|
writeDefaultProjectDir
|
|
}) {
|
|
ipcMain.handle('hermes:setting:defaultProjectDir:get', async () => ({
|
|
dir: readDefaultProjectDir(),
|
|
defaultLabel: app.getPath('home'),
|
|
resolvedCwd: resolveHermesCwd()
|
|
}))
|
|
|
|
ipcMain.handle('hermes:workspace:sanitize', async (_event, cwd) => sanitizeWorkspaceCwd(cwd))
|
|
|
|
ipcMain.handle('hermes:setting:defaultProjectDir:set', async (_event, dir) => {
|
|
const next = typeof dir === 'string' && dir.trim() ? dir.trim() : null
|
|
|
|
if (next) {
|
|
try {
|
|
fs.mkdirSync(next, { recursive: true })
|
|
} catch (error) {
|
|
throw new Error(`Could not create directory: ${error.message}`)
|
|
}
|
|
}
|
|
|
|
writeDefaultProjectDir(next)
|
|
|
|
return { dir: next }
|
|
})
|
|
|
|
ipcMain.handle('hermes:setting:defaultProjectDir:pick', async () => {
|
|
const result = await dialog.showOpenDialog({
|
|
title: 'Choose default project directory',
|
|
properties: ['openDirectory', 'createDirectory'],
|
|
defaultPath: readDefaultProjectDir() || app.getPath('home')
|
|
})
|
|
|
|
if (result.canceled || result.filePaths.length === 0) {
|
|
return { canceled: true, dir: null }
|
|
}
|
|
|
|
return { canceled: false, dir: result.filePaths[0] }
|
|
})
|
|
}
|
|
|
|
module.exports = { registerProjectDirIpc }
|