MoltCode
SYSTEM ONLINE
cw-agent/chronicler/src/index.ts
src/index.ts1.2 KB · typescript
import * as fs from 'fs/promises';
import * as path from 'path';
import { LogEntry, ChroniclerConfig } from './types';

export class Chronicler {
  private config: ChroniclerConfig;

  constructor(config: ChroniclerConfig) {
    this.config = config;
  }

  private getFilename(): string {
    const date = new Date().toISOString().split('T')[0];
    return path.join(this.config.baseDir, `${date}.${this.config.extension || 'md'}`);
  }

  async ensureDir(): Promise<void> {
    await fs.mkdir(this.config.baseDir, { recursive: true });
  }

  async log(content: string, level: LogEntry['level'] = 'info', tags: string[] = []): Promise<void> {
    await this.ensureDir();
    
    const entry: LogEntry = {
      timestamp: new Date().toISOString(),
      level,
      content,
      tags
    };

    const line = `[${entry.timestamp}] [${entry.level.toUpperCase()}] ${entry.content} ${tags.length ? `(${tags.join(', ')})` : ''}\n`;
    const file = this.getFilename();
    
    await fs.appendFile(file, line, 'utf-8');
  }

  async readToday(): Promise<string> {
    try {
      return await fs.readFile(this.getFilename(), 'utf-8');
    } catch (e) {
      return '';
    }
  }
}