fix: improve pluginDir resolution with fallback and add debug logging
This commit is contained in:
@@ -10,17 +10,23 @@ import { startModeratorPresence, stopModeratorPresence } from "./moderator-prese
|
|||||||
let noReplyProcess: ChildProcess | null = null;
|
let noReplyProcess: ChildProcess | null = null;
|
||||||
|
|
||||||
function startNoReplyApi(logger: { info: (m: string) => void; warn: (m: string) => void }, pluginDir: string, port = 8787): void {
|
function startNoReplyApi(logger: { info: (m: string) => void; warn: (m: string) => void }, pluginDir: string, port = 8787): void {
|
||||||
|
logger.info(`dirigent: startNoReplyApi called, pluginDir=${pluginDir}`);
|
||||||
|
|
||||||
if (noReplyProcess) {
|
if (noReplyProcess) {
|
||||||
logger.info("dirigent: no-reply API already running, skipping");
|
logger.info("dirigent: no-reply API already running, skipping");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const serverPath = path.resolve(pluginDir, "..", "no-reply-api", "server.mjs");
|
const serverPath = path.resolve(pluginDir, "..", "no-reply-api", "server.mjs");
|
||||||
|
logger.info(`dirigent: resolved serverPath=${serverPath}`);
|
||||||
|
|
||||||
if (!fs.existsSync(serverPath)) {
|
if (!fs.existsSync(serverPath)) {
|
||||||
logger.warn(`dirigent: no-reply API server not found at ${serverPath}, skipping`);
|
logger.warn(`dirigent: no-reply API server not found at ${serverPath}, skipping`);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
logger.info(`dirigent: no-reply API server found, spawning process...`);
|
||||||
|
|
||||||
noReplyProcess = spawn(process.execPath, [serverPath], {
|
noReplyProcess = spawn(process.execPath, [serverPath], {
|
||||||
env: { ...process.env, PORT: String(port) },
|
env: { ...process.env, PORT: String(port) },
|
||||||
stdio: ["ignore", "pipe", "pipe"],
|
stdio: ["ignore", "pipe", "pipe"],
|
||||||
@@ -509,16 +515,48 @@ export default {
|
|||||||
|
|
||||||
// Resolve plugin directory for locating sibling modules (no-reply-api/)
|
// Resolve plugin directory for locating sibling modules (no-reply-api/)
|
||||||
// Use api.resolvePath to get the actual plugin directory in OpenClaw environment
|
// Use api.resolvePath to get the actual plugin directory in OpenClaw environment
|
||||||
const pluginDir = api.resolvePath(".");
|
let pluginDir = api.resolvePath(".");
|
||||||
|
|
||||||
|
// Fallback: if resolvePath returns unexpected path, try to derive from __dirname or import.meta.url
|
||||||
|
if (!fs.existsSync(path.join(pluginDir, "openclaw.plugin.json"))) {
|
||||||
|
// Try using import.meta.url as fallback
|
||||||
|
const metaUrlDir = path.dirname(new URL(import.meta.url).pathname);
|
||||||
|
if (fs.existsSync(path.join(metaUrlDir, "openclaw.plugin.json"))) {
|
||||||
|
pluginDir = metaUrlDir;
|
||||||
|
api.logger.info(`dirigent: using import.meta.url directory: ${pluginDir}`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
api.logger.info(`dirigent: resolved pluginDir=${pluginDir}`);
|
||||||
|
|
||||||
// Gateway lifecycle: start/stop no-reply API and moderator bot with the gateway
|
// Gateway lifecycle: start/stop no-reply API and moderator bot with the gateway
|
||||||
api.on("gateway_start", () => {
|
api.on("gateway_start", () => {
|
||||||
|
api.logger.info(`dirigent: gateway_start event received`);
|
||||||
|
|
||||||
|
// Check no-reply-api server file exists
|
||||||
|
const serverPath = path.resolve(pluginDir, "..", "no-reply-api", "server.mjs");
|
||||||
|
api.logger.info(`dirigent: checking no-reply-api server at ${serverPath}, exists=${fs.existsSync(serverPath)}`);
|
||||||
|
|
||||||
|
// Additional debug: list what's in the parent directory
|
||||||
|
const parentDir = path.resolve(pluginDir, "..");
|
||||||
|
try {
|
||||||
|
const entries = fs.readdirSync(parentDir);
|
||||||
|
api.logger.info(`dirigent: parent dir (${parentDir}) entries: ${JSON.stringify(entries)}`);
|
||||||
|
} catch (e) {
|
||||||
|
api.logger.warn(`dirigent: cannot read parent dir: ${String(e)}`);
|
||||||
|
}
|
||||||
|
|
||||||
startNoReplyApi(api.logger, pluginDir);
|
startNoReplyApi(api.logger, pluginDir);
|
||||||
|
|
||||||
const live = getLivePluginConfig(api, baseConfig as DirigentConfig);
|
const live = getLivePluginConfig(api, baseConfig as DirigentConfig);
|
||||||
|
api.logger.info(`dirigent: config loaded, moderatorBotToken=${live.moderatorBotToken ? "[set]" : "[not set]"}`);
|
||||||
|
|
||||||
if (live.moderatorBotToken) {
|
if (live.moderatorBotToken) {
|
||||||
|
api.logger.info("dirigent: starting moderator bot presence...");
|
||||||
startModeratorPresence(live.moderatorBotToken, api.logger);
|
startModeratorPresence(live.moderatorBotToken, api.logger);
|
||||||
api.logger.info("dirigent: moderator bot presence starting");
|
api.logger.info("dirigent: moderator bot presence started");
|
||||||
|
} else {
|
||||||
|
api.logger.info("dirigent: moderator bot not starting - no moderatorBotToken in config");
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user