Phase 0: - Synced latest live-status.js from workspace (9928 bytes) - Fixed 43 lint issues: empty catch blocks, console statements - Added pino dependency - Created src/tool-labels.json with all known tool mappings - make check passes Phase 1 (Core Components): - src/config.js: env-var config with validation, throws on missing required vars - src/logger.js: pino singleton with child loggers, level validation - src/circuit-breaker.js: CLOSED/OPEN/HALF_OPEN state machine with callbacks - src/tool-labels.js: exact/prefix/regex tool->label resolver with external override - src/status-box.js: Mattermost post manager (keepAlive, throttle, retry, circuit breaker) - src/status-formatter.js: pure SessionState->text formatter (nested, compact) - src/health.js: HTTP health endpoint + metrics - src/status-watcher.js: JSONL file watcher (inotify, compaction detection, idle detection) Tests: - test/unit/config.test.js: 7 tests - test/unit/circuit-breaker.test.js: 12 tests - test/unit/logger.test.js: 5 tests - test/unit/status-formatter.test.js: 20 tests - test/unit/tool-labels.test.js: 15 tests All 59 unit tests pass. make check clean.
58 lines
1.4 KiB
JavaScript
58 lines
1.4 KiB
JavaScript
'use strict';
|
|
|
|
/**
|
|
* Unit tests for logger.js
|
|
*/
|
|
|
|
const { describe, it, beforeEach, afterEach } = require('node:test');
|
|
const assert = require('node:assert/strict');
|
|
|
|
const { getLogger, sessionLogger, resetLogger } = require('../../src/logger');
|
|
|
|
describe('logger.js', () => {
|
|
beforeEach(() => {
|
|
resetLogger();
|
|
});
|
|
|
|
afterEach(() => {
|
|
resetLogger();
|
|
});
|
|
|
|
it('getLogger() returns a pino logger', () => {
|
|
const logger = getLogger();
|
|
assert.ok(logger);
|
|
assert.equal(typeof logger.info, 'function');
|
|
assert.equal(typeof logger.warn, 'function');
|
|
assert.equal(typeof logger.error, 'function');
|
|
assert.equal(typeof logger.debug, 'function');
|
|
});
|
|
|
|
it('getLogger() returns the same instance each time (singleton)', () => {
|
|
const a = getLogger();
|
|
const b = getLogger();
|
|
assert.equal(a, b);
|
|
});
|
|
|
|
it('respects LOG_LEVEL env var', () => {
|
|
const original = process.env.LOG_LEVEL;
|
|
process.env.LOG_LEVEL = 'warn';
|
|
const logger = getLogger();
|
|
assert.equal(logger.level, 'warn');
|
|
process.env.LOG_LEVEL = original;
|
|
resetLogger();
|
|
});
|
|
|
|
it('sessionLogger() returns a child logger', () => {
|
|
const child = sessionLogger('agent:main:test');
|
|
assert.ok(child);
|
|
assert.equal(typeof child.info, 'function');
|
|
});
|
|
|
|
it('resetLogger() clears the singleton', () => {
|
|
const a = getLogger();
|
|
resetLogger();
|
|
const b = getLogger();
|
|
assert.notEqual(a, b);
|
|
});
|
|
});
|