import { writeFile, mkdir } from 'node:fs/promises' import { simpleGit } from 'simple-git' import { VAULT_PATH } from '../config.js' import { VAULT_SUBDIRS, todayIso, vaultPath, vaultRelFrom, isoWeekId } from '../vault.js' import { listVaultNotes } from '../memory-graph.js' import type { MissionFn } from './types.js' import { logger } from '../logger.js' const git = simpleGit(VAULT_PATH) export const weeklyReview: MissionFn = async (ctx) => { const now = ctx.now const date = now.toISOString().slice(0, 10) const weekId = isoWeekId(date) const fileAbs = vaultPath(VAULT_SUBDIRS.progress, `${weekId}.md`) const rel = vaultRelFrom(fileAbs) const days = [] for (let i = 0; i < 7; i++) { const d = new Date(now.getTime() - i * 86_400_000) days.push(d.toISOString().slice(0, 10)) } const dailyPaths = days.map(iso => vaultPath(VAULT_SUBDIRS.daily, `${iso}.md`)) const linkBlock = dailyPaths .map(abs => `- [[${vaultRelFrom(abs)}]]`) .join('\n') const ideas = listVaultNotes('06_Projects/ideas') .filter(n => n.relPath.endsWith('/index.md')) .filter(n => now.getTime() - n.mtime < 7 * 86_400_000) const captures = listVaultNotes('04_Notes/inbox') .filter(n => now.getTime() - n.mtime < 7 * 86_400_000) const body = `--- created: ${todayIso()} week: ${weekId} tags: [weekly-review, auto] --- # Weekly review — ${weekId} ## Days ${linkBlock} ## Captures this week ${captures.map(n => `- [[${vaultRelFrom(n.absPath)}]]`).join('\n') || '- _none_'} ## Ideas touched ${ideas.map(n => `- [[${vaultRelFrom(n.absPath)}]]`).join('\n') || '- _none_'} ## Reflections - What advanced? - What slipped? - What changes next week? ` await mkdir(vaultPath(VAULT_SUBDIRS.progress), { recursive: true }) await writeFile(fileAbs, body) try { await git.add(rel) await git.commit(`[mc] weekly-review: ${rel}`) try { await git.push() } catch (err) { logger.warn({ err }, 'weekly push failed') } } catch (err) { logger.warn({ err }, 'weekly commit failed') } await ctx.send(`Weekly review · ${rel} written. Fill in reflections.`) return { summary: 'weekly review written', data: { weekId } } }