Menu
popagent
publicLatest change 7fe5fe2acff014eed98cc59694a021837a6713c6 - Serialize code-intelligence sessions per repository and self-heal corrupt or locked indexes by AkurAI Build
import type { IMastraLogger } from "@mastra/core/logger";
import { PinoLogger } from "@mastra/loggers";
import { MastraStorageExporter, Observability, SamplingStrategyType } from "@mastra/observability";
import { AGENT_CONTEXT_KEYS } from "./agent-context";
export const OBSERVABILITY_SENSITIVE_FIELDS = [
"password", "token", "secret", "key", "apikey", "auth", "authorization",
"bearer", "bearertoken", "jwt", "credential", "clientsecret", "privatekey",
"refresh", "ssn", "value",
];
/**
* Mastra warnings that describe expected, correctly-handled behaviour. They
* still land in the log, at info, so operators are not paged by them:
* - a specialist's requested delegation budget is capped to the configured
* specialist step budget every time the Orchistrator asks for more.
*/
const EXPECTED_WARNINGS = [
/^Delegation maxSteps exceeds sub-agent default, capping$/,
];
class PopagentLogger extends PinoLogger {
override warn(message: string, args?: Record<string, unknown>): void {
if (EXPECTED_WARNINGS.some((pattern) => pattern.test(message))) {
super.info(message, args);
return;
}
super.warn(message, args);
}
}
export const logger = new PopagentLogger({
name: "popagent",
level: process.env.POPAGENT_ISOLATED_TEST === "1" ? "silent" : "info",
prettyPrint: process.env.NODE_ENV !== "production",
redact: {
paths: [
"authorization",
"headers.authorization",
"apiKey",
"token",
"secret",
"value",
"password",
],
censor: "[REDACTED]",
},
});
let activeLogger: IMastraLogger = logger;
export const appLogger = () => activeLogger;
export const setAppLogger = (next: IMastraLogger) => { activeLogger = next; };
export const observability = new Observability({
configs: {
default: {
serviceName: "popagent",
sampling: { type: SamplingStrategyType.ALWAYS },
exporters: [new MastraStorageExporter({ strategy: "auto" })],
requestContextKeys: [
AGENT_CONTEXT_KEYS.resourceId,
AGENT_CONTEXT_KEYS.sessionId,
AGENT_CONTEXT_KEYS.turnId,
AGENT_CONTEXT_KEYS.model,
AGENT_CONTEXT_KEYS.workspaceId,
AGENT_CONTEXT_KEYS.executionSource,
AGENT_CONTEXT_KEYS.taskId,
AGENT_CONTEXT_KEYS.scheduleId,
],
serializationOptions: {
maxStringLength: 4_096,
maxDepth: 8,
maxArrayLength: 100,
maxObjectKeys: 75,
},
logging: { enabled: true, level: "info" },
},
},
sensitiveDataFilter: {
sensitiveFields: OBSERVABILITY_SENSITIVE_FIELDS,
redactionStyle: "full",
redactionToken: "[REDACTED]",
},
});