Restructure chat service, web routes, and add test suite
Split monolithic chat service into modular structure with Matrix client support, extract web server into per-resource route modules, introduce bootstrap/main-loop separation, and add comprehensive vitest coverage across services, repositories, and utilities. Adds project docs and CLAUDE.md agent instructions.
This commit is contained in:
1 parent
dfa0580859
commit
633bb0ec04
84 files changed
+19278
-3888
No files matched your search
+17
-1
@@ -2,6 +2,22 @@ import winston from 'winston';
|
||||
|
||||
export type Logger = winston.Logger;
|
||||
|
||||
function safeStringify(value: unknown): string {
|
||||
const seen = new WeakSet<object>();
|
||||
try {
|
||||
return JSON.stringify(value, (_key, val) => {
|
||||
if (typeof val === 'object' && val !== null) {
|
||||
if (seen.has(val)) return '[Circular]';
|
||||
seen.add(val);
|
||||
}
|
||||
if (typeof val === 'bigint') return val.toString();
|
||||
return val;
|
||||
});
|
||||
} catch (err) {
|
||||
return `[Unserializable: ${(err as Error).message}]`;
|
||||
}
|
||||
}
|
||||
|
||||
export function createLogger(): Logger {
|
||||
return winston.createLogger({
|
||||
level: process.env.LOG_LEVEL || 'info',
|
||||
@@ -15,7 +31,7 @@ export function createLogger(): Logger {
|
||||
format: winston.format.combine(
|
||||
winston.format.colorize(),
|
||||
winston.format.printf(({ level, message, timestamp, ...meta }) => {
|
||||
const metaStr = Object.keys(meta).length ? ` ${JSON.stringify(meta)}` : '';
|
||||
const metaStr = Object.keys(meta).length ? ` ${safeStringify(meta)}` : '';
|
||||
return `${timestamp} [${level}]: ${message}${metaStr}`;
|
||||
})
|
||||
),
|
||||
|
||||
Reference in new issue
Block a user