chat: run Claude un-isolated for the Super Admin (real HOME, ~/.claude parity)
Single-user platform: the Super Admin's Claude process now uses the real home (HOME_DIR) instead of DATA_PATH/<email>/home, so its transcript store IS the same ~/.claude the terminal `claude` uses — platform and terminal sessions are interchangeable (native `/resume` sees them). The session reader resolves the same home. The generated container CLAUDE.md is no longer written for the Super Admin (it would pollute the personal global ~/.claude/CLAUDE.md and is stale); MCP tools still load via --mcp-config, and email/project panels inject their own prompts. Sandboxed users keep their isolated home. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -6,8 +6,11 @@ import { DATA_PATH } from '../../data-path';
|
||||
// The `claude` CLI persists every session as a JSONL transcript at
|
||||
// $HOME/.claude/projects/<slug>/<session-uuid>.jsonl
|
||||
// where <slug> is the working directory with every non-alphanumeric char replaced by '-'.
|
||||
// A user's claude process runs with HOME = DATA_PATH/<email>/home (see sidecar/claude/user-instance.ts),
|
||||
// so we read transcripts from there. We never maintain our own copy — Claude's files are authoritative.
|
||||
// The (single-user, Super Admin) platform runs Claude with no isolation — HOME is the real home
|
||||
// (HOME_DIR) — so its transcripts are the same store the terminal `claude` uses. We never keep our
|
||||
// own copy; Claude's files are authoritative.
|
||||
|
||||
const claudeHome = (email: string): string => process.env.HOME_DIR ?? join(DATA_PATH, email, 'home');
|
||||
|
||||
/** Dedicated working directory for /chat sessions, so they form their own Claude "project" group. */
|
||||
export const getClaudeSessionsCwd = (email: string): string => join(DATA_PATH, email, 'claude_sessions');
|
||||
@@ -19,7 +22,7 @@ export const ensureClaudeSessionsCwd = (email: string): string => {
|
||||
return dir;
|
||||
};
|
||||
|
||||
const claudeProjectsDir = (email: string): string => join(DATA_PATH, email, 'home', '.claude', 'projects');
|
||||
const claudeProjectsDir = (email: string): string => join(claudeHome(email), '.claude', 'projects');
|
||||
|
||||
/** Claude's folder name for a working directory. */
|
||||
export const projectSlug = (cwd: string): string => cwd.replace(/[^a-zA-Z0-9]/g, '-');
|
||||
|
||||
Reference in New Issue
Block a user