From 2170363af4c3de74e409adf63cfb628e7f7d0ade Mon Sep 17 00:00:00 2001 From: Mario Zechner Date: Thu, 9 Jul 2026 11:30:59 +0200 Subject: [PATCH] fix(coding-agent): avoid Windows context file walk hang closes #6369 --- packages/coding-agent/CHANGELOG.md | 1 + packages/coding-agent/src/core/resource-loader.ts | 7 ++----- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/packages/coding-agent/CHANGELOG.md b/packages/coding-agent/CHANGELOG.md index e0e85154..1e8708c1 100644 --- a/packages/coding-agent/CHANGELOG.md +++ b/packages/coding-agent/CHANGELOG.md @@ -21,6 +21,7 @@ - Fixed new session resets to clear cached label timestamps ([#6354](https://github.com/earendil-works/pi/issues/6354)). - Fixed auto-retry for Bun fetch socket-drop errors reported as `socket connection was closed`, so transient provider disconnects do not end headless runs without retrying ([#6431](https://github.com/earendil-works/pi/issues/6431)). - Fixed `models.json` `modelOverrides` to apply to extension-registered provider models ([#6367](https://github.com/earendil-works/pi/issues/6367)). +- Fixed project context file discovery to use stable parent traversal on Windows so startup no longer hangs while loading AGENTS.md or CLAUDE.md ([#6369](https://github.com/earendil-works/pi/issues/6369)). ### Removed diff --git a/packages/coding-agent/src/core/resource-loader.ts b/packages/coding-agent/src/core/resource-loader.ts index d34f5a96..e66d9771 100644 --- a/packages/coding-agent/src/core/resource-loader.ts +++ b/packages/coding-agent/src/core/resource-loader.ts @@ -1,5 +1,5 @@ import { existsSync, readdirSync, readFileSync, statSync } from "node:fs"; -import { join, resolve, sep } from "node:path"; +import { dirname, join, resolve, sep } from "node:path"; import chalk from "chalk"; import { CONFIG_DIR_NAME } from "../config.ts"; import { loadThemeFromPath, type Theme } from "../modes/interactive/theme/theme.ts"; @@ -101,7 +101,6 @@ export function loadProjectContextFiles(options: { const ancestorContextFiles: Array<{ path: string; content: string }> = []; let currentDir = resolvedCwd; - const root = resolve("/"); while (true) { const contextFile = loadContextFileFromDir(currentDir); @@ -110,9 +109,7 @@ export function loadProjectContextFiles(options: { seenPaths.add(contextFile.path); } - if (currentDir === root) break; - - const parentDir = resolve(currentDir, ".."); + const parentDir = dirname(currentDir); if (parentDir === currentDir) break; currentDir = parentDir; }