mirror of
https://github.com/affaan-m/ECC.git
synced 2026-10-17 05:35:36 +02:00
fix(plan-canvas): route session state through CLAUDE_CONFIG_DIR
The Plan Canvas library wrote ~/.claude/plan-canvas while the SessionStart and Stop hooks read CLAUDE_CONFIG_DIR/plan-canvas. Under a second profile SessionStart missed open reviews and Stop let a turn end with feedback still queued. Expand a leading ~ in CLAUDE_CONFIG_DIR the way scripts/lib/agent-data-home.js does, so a profile written as ~/.claude-work resolves to one directory rather than two. Add hook-level coverage that spawns each hook with a distinct CLAUDE_CONFIG_DIR and no ECC_* override, plus a producer-to-consumer round trip. Eight of the nine cases fail against the previous revision.
This commit is contained in:
@@ -38,14 +38,22 @@ function appendLine(filePath, line) {
|
||||
fs.appendFileSync(filePath, `${line}\n`, 'utf8');
|
||||
}
|
||||
|
||||
// Claude Code redirects every profile-local path when CLAUDE_CONFIG_DIR is set.
|
||||
// Writing to ~/.claude regardless leaks this profile's data into the default one.
|
||||
// Resolve the Claude profile directory the same way everywhere.
|
||||
//
|
||||
// Duplicated rather than imported on purpose: hooks ship in managed installs
|
||||
// that carry top-level `scripts/` without `scripts/lib/` (see #3259), so a
|
||||
// require into lib/ would make the hook unloadable there. `~` is expanded the
|
||||
// way `scripts/lib/agent-data-home.js` expands it, so a profile written as
|
||||
// `~/.claude-work` resolves to one place rather than two.
|
||||
function claudeConfigDir() {
|
||||
const configured = process.env.CLAUDE_CONFIG_DIR;
|
||||
if (configured && String(configured).trim().length > 0) {
|
||||
return path.resolve(String(configured).trim());
|
||||
const trimmed = configured ? String(configured).trim() : '';
|
||||
if (!trimmed) return path.join(os.homedir(), '.claude');
|
||||
if (trimmed.startsWith('~')) {
|
||||
const remainder = trimmed.slice(1).replace(/^[/\\]+/, '');
|
||||
return remainder ? path.join(os.homedir(), remainder) : os.homedir();
|
||||
}
|
||||
return path.join(os.homedir(), '.claude');
|
||||
return path.resolve(trimmed);
|
||||
}
|
||||
|
||||
function run(rawInput, mode = 'audit') {
|
||||
|
||||
Reference in New Issue
Block a user