openclaw
Version:
Multi-channel AI gateway with extensible messaging integrations
62 lines (61 loc) • 1.81 kB
JavaScript
import { y as resolveStateDir } from "../../paths-mvMm5bYV.js";
import { i as formatErrorMessage } from "../../errors-BXgSefBE.js";
import "../../fs-safe-aqmM_n6V.js";
import { t as appendRegularFile } from "../../regular-file-BD2zl6_l.js";
import { t as createSubsystemLogger } from "../../subsystem-BzXSmsuh.js";
import path from "node:path";
import fs from "node:fs/promises";
import os from "node:os";
//#region src/hooks/bundled/command-logger/handler.ts
/**
* Example hook handler: Log all commands to a file
*
* This handler demonstrates how to create a hook that logs all command events
* to a centralized log file for audit/debugging purposes.
*
* To enable this handler, add it to your config:
*
* ```json
* {
* "hooks": {
* "internal": {
* "enabled": true,
* "handlers": [
* {
* "event": "command",
* "module": "./hooks/handlers/command-logger.ts"
* }
* ]
* }
* }
* }
* ```
*/
const log = createSubsystemLogger("command-logger");
/**
* Log all command events to a file
*/
const logCommand = async (event) => {
if (event.type !== "command") return;
try {
const stateDir = resolveStateDir(process.env, os.homedir);
const logDir = path.join(stateDir, "logs");
await fs.mkdir(logDir, { recursive: true });
await appendRegularFile({
filePath: path.join(logDir, "commands.log"),
content: JSON.stringify({
timestamp: event.timestamp.toISOString(),
action: event.action,
sessionKey: event.sessionKey,
senderId: event.context.senderId ?? "unknown",
source: event.context.commandSource ?? "unknown"
}) + "\n",
rejectSymlinkParents: true
});
} catch (err) {
const message = formatErrorMessage(err);
log.error(`Failed to log command: ${message}`);
}
};
//#endregion
export { logCommand as default };