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 -3
View File
@@ -128,7 +128,7 @@ async function main() {
const entries = discoverProject(targetPath);
console.log(`Scanning ${formatCount(entries.length, "directory")}...`);
const client = createClientFromArgs(parsed);
await initProject(targetPath, { verbose: false, llmClient: client });
await initProject(targetPath, { verbose: false, llmClient: client, cacheDir: targetPath });
const elapsed = ((Date.now() - start) / 1000).toFixed(1);
console.log(
`${pc.green("✓")} Generated ${formatCount(entries.length, ".pi-map.md file")} in ${elapsed}s`,
@@ -143,7 +143,7 @@ async function main() {
process.exit(1);
}
const client = createClientFromArgs(parsed);
await patchFile(parsed.positional[0], client);
await patchFile(parsed.positional[0], client, process.cwd());
console.log(`${pc.green("✓")} Patched`);
break;
}
@@ -179,7 +179,7 @@ async function main() {
`Regenerating ${formatCount(entries.length, ".pi-map.md file")}...`,
);
const client = createClientFromArgs(parsed);
await reinitPath(targetPath, { verbose: false, llmClient: client });
await reinitPath(targetPath, { verbose: false, llmClient: client, cacheDir: targetPath });
const elapsed = ((Date.now() - start) / 1000).toFixed(1);
console.log(`${pc.green("✓")} Regenerated in ${elapsed}s`);
break;