#!/usr/bin/env bun /** * Generate evolving session titles via rolling compression. * Entry point - delegates to testable module. */ import { existsSync, readFileSync } from "fs"; import { getProjectName, writeTitle } from "./generate-core.ts"; // Load ~/.claude/.env if present // portability: allow const envPath = `${process.env.HOME}/.claude/.env`; // portability: allow if (existsSync(envPath)) { for (const line of readFileSync(envPath, "utf-8").split("\n")) { const [key, ...rest] = line.split("="); if (key?.trim() && !key.startsWith("#") && !process.env[key.trim()]) { process.env[key.trim()] = rest.join("=").trim().replace(/^["']|["']$/g, ""); } } } async function main() { const { session_id, cwd, transcript_path } = JSON.parse(await Bun.stdin.text()); if (!session_id || !cwd) process.exit(1); const projectName = getProjectName(cwd); const dir = `${process.env.HOME}/.claude/session-titles/${projectName}`; // portability: allow const titleFile = `${dir}/${session_id}.txt`; let currentTitle = existsSync(titleFile) ? readFileSync(titleFile, "utf-8").trim() : null; // Strip existing shift prefix like "(3) " to avoid duplication when re-formatted if (currentTitle) { currentTitle = currentTitle.replace(/^(\(\d+\)\s*)+/, ""); } // Pass projectName for richer context extraction await writeTitle(dir, session_id, currentTitle, transcript_path, projectName); } main();