feat: move LLM cache to project-local directory

- Cache now lives in <project>/.pi-project-map/cache/llm-cache.json
- Removed global ~/.cache/pi-project-map/ usage
- Cache travels with the project, no cross-project collisions
- Easy to invalidate: rm -rf .pi-project-map/cache/

Files changed:
- llm-cache.ts: accept cacheDir parameter, default to project-local
- llm-extract.ts: pass cacheDir through to cache functions
- init.ts: pass rootPath as cacheDir
- patch.ts: accept and pass cacheDir
- cli.ts: pass targetPath as cacheDir
- pi-extension.ts: pass ctx.cwd as cacheDir
- Tests updated to use temp dirs for cache isolation
This commit is contained in:
2026-06-10 15:13:10 +02:00
parent 5c6719817f
commit ed9f843d65
10 changed files with 88 additions and 49 deletions
+3 -1
View File
@@ -13,6 +13,7 @@ const SMALL_PACKAGE_THRESHOLD = 10;
export async function patchFile(
filePath: string,
llmClient?: LLMClient,
cacheDir?: string,
): Promise<void> {
const dirPath = dirname(filePath);
const mapPath = join(dirPath, ".pi-map.md");
@@ -42,6 +43,7 @@ export async function patchFile(
files,
},
llmClient,
cacheDir,
);
console.log(
`Full rewrite of ${mapPath} (small package: ${allFiles.length} files)`,
@@ -49,7 +51,7 @@ export async function patchFile(
} else {
// Section-level patch
const existing = parsePackageMap(readFileSync(mapPath, "utf8"));
const llmData = await extractFileLLM(filePath, llmClient);
const llmData = await extractFileLLM(filePath, llmClient, cacheDir);
const astData = await extractFileAST(filePath);
const fileName = basename(filePath);
const updatedFile = mergeFileData(fileName, llmData, astData);