#!/usr/bin/env tsx /** * Importa comentários das discussões Desk #31/#32/#33 (worklogs, reflexões * e acções de melhoria) para a BD Observabilidade. * * Uso: * sessions-worklog-import.ts [--discussion 31|32|33|all] [--since-days N] * sessions-worklog-import.ts --discussion 31 --page-size 200 * * Default: --discussion all --since-days 365 * * Env obrigatório: * MCP_GATEWAY_TOKEN Bearer token do gateway MCP */ import { openSessionsDb } from '../services/sessions/db.js' import { DEFAULT_DB_PATH } from '../services/sessions/indexer.js' import { importWorklogDiscussion, type ImportResult } from '../services/sessions/worklog-import.js' interface Args { discussion: 'all' | number sinceDays: number pageSize: number } function parseArgs(argv: string[]): Args { const a: Args = { discussion: 'all', sinceDays: 365, pageSize: 500 } for (let i = 0; i < argv.length; i++) { if (argv[i] === '--discussion') { const v = argv[++i] a.discussion = v === 'all' ? 'all' : parseInt(v, 10) } else if (argv[i] === '--since-days') { a.sinceDays = parseInt(argv[++i], 10) } else if (argv[i] === '--page-size') { a.pageSize = parseInt(argv[++i], 10) } } return a } async function main(): Promise { const args = parseArgs(process.argv.slice(2)) if (!process.env.MCP_GATEWAY_TOKEN) { console.error('[worklog-import] MCP_GATEWAY_TOKEN não definido. Aborta.') process.exit(1) } const dbPath = process.env.OBSERVABILIDADE_DB ?? DEFAULT_DB_PATH const db = openSessionsDb(dbPath) const discussions = args.discussion === 'all' ? [31, 32, 33] : [args.discussion as number] const sinceIso = new Date(Date.now() - args.sinceDays * 86400_000).toISOString() console.error( `[worklog-import] db=${dbPath} discussions=${discussions.join(',')} since=${sinceIso} page_size=${args.pageSize}`, ) const results: ImportResult[] = [] for (const d of discussions) { try { const r = await importWorklogDiscussion(db, d, { sinceIso, pageSize: args.pageSize }) results.push(r) console.error( `[worklog-import] #${d}: fetched=${r.fetched} inserted=${r.imported} updated=${r.updated} skipped=${r.skipped} errors=${r.errors}`, ) } catch (e) { console.error(`[worklog-import] falha #${d}:`, (e as Error).message) results.push({ discussion_id: d, fetched: 0, imported: 0, updated: 0, skipped: 0, errors: 1, }) } } const summary = { db: dbPath, since_iso: sinceIso, discussions: results, totals: { fetched: results.reduce((s, r) => s + r.fetched, 0), imported: results.reduce((s, r) => s + r.imported, 0), updated: results.reduce((s, r) => s + r.updated, 0), skipped: results.reduce((s, r) => s + r.skipped, 0), errors: results.reduce((s, r) => s + r.errors, 0), }, total_in_db: db.countWorklogComments(), } console.log(JSON.stringify(summary)) db.close() } main().catch((err) => { console.error('[worklog-import] falha fatal:', err) process.exit(2) })