diff --git a/src/apps/officer-web/Screens/Dashboard/Email/EmailChat.tsx b/src/apps/officer-web/Screens/Dashboard/Email/EmailChat.tsx index 39edc0ae..da45654a 100644 --- a/src/apps/officer-web/Screens/Dashboard/Email/EmailChat.tsx +++ b/src/apps/officer-web/Screens/Dashboard/Email/EmailChat.tsx @@ -1,6 +1,6 @@ import { EmbeddableChat, usePiChat } from 'officerdev'; -const PROMPT_PREFIX = `You are an email assistant. The user has a local SQLite email database available via the "email-db" tool — use it for all email queries (search, count, stats, aggregations, deletions) unless the user explicitly asks you to use Gmail. Do not use the Gmail integration for questions about existing emails.`; +const PROMPT_PREFIX = `You are an email assistant. The user has a local SQLite email database available via the "email_db" tool — use it for all email queries (search, count, stats, aggregations, deletions) unless the user explicitly asks you to use Gmail. Do not use the Gmail integration for questions about existing emails.`; export const EmailChat = () => { const chat = usePiChat(undefined, undefined, { replaceUrl: false }); diff --git a/src/apps/officer-web/Screens/Dashboard/Email/EmailScreen.tsx b/src/apps/officer-web/Screens/Dashboard/Email/EmailScreen.tsx index 7d137a77..0400f044 100644 --- a/src/apps/officer-web/Screens/Dashboard/Email/EmailScreen.tsx +++ b/src/apps/officer-web/Screens/Dashboard/Email/EmailScreen.tsx @@ -9,7 +9,7 @@ import { defaultLayout } from './defaultLayout'; import { EmailList } from './EmailList'; import { EmailReader } from './EmailReader'; -const PROMPT_PREFIX = `You are an email assistant. The user has a local SQLite email database available via the "email-db" tool — use it for all email queries (search, count, stats, aggregations, deletions) unless the user explicitly asks you to use Gmail. Do not use the Gmail integration for questions about existing emails.`; +const PROMPT_PREFIX = `You are an email assistant. The user has a local SQLite email database available via the "email_db" tool — use it for all email queries (search, count, stats, aggregations, deletions) unless the user explicitly asks you to use Gmail. Do not use the Gmail integration for questions about existing emails.`; export const EmailScreen = () => { const isMobile = useIsMobile(); diff --git a/src/servers/sidecar/claude/claude-manager.ts b/src/servers/sidecar/claude/claude-manager.ts index 597c6e33..0bbc1cb3 100644 --- a/src/servers/sidecar/claude/claude-manager.ts +++ b/src/servers/sidecar/claude/claude-manager.ts @@ -1,3 +1,4 @@ +import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs'; import { join } from 'node:path'; import type { Subprocess } from 'bun'; import type { PiEvent, MessageCost } from '../../api/pi/types'; @@ -6,12 +7,18 @@ import { getState, setClaudeSession, clearClaudeSession, getClaudeSession } from import { getProxySecret } from './proxy'; import { discoverTools } from '../../tool-registry'; import type { ToolDefinition } from '../../tool-registry'; +import { DATA_PATH, getHomeDir } from '../../data-path'; +import { generateContainerContext } from '../../generate-container-context'; const SEND_TIMEOUT_MS = 5 * 60 * 1000; const PROXY_PORT = process.env.ANTHROPIC_PROXY_PORT ?? '5051'; -const DATA_PATH = process.env.DATA_PATH ?? join(process.cwd(), 'data'); -const getHomeDir = (email: string) => join(DATA_PATH, email, 'home'); +function refreshClaudeMd(email: string): void { + const claudeDir = join(getHomeDir(email), '.claude'); + if (!existsSync(claudeDir)) mkdirSync(claudeDir, { recursive: true }); + const contextFile = generateContainerContext(email); + writeFileSync(join(claudeDir, 'CLAUDE.md'), readFileSync(contextFile, 'utf-8')); +} function buildToolContext(email: string): string { const tools = discoverTools(email); @@ -89,6 +96,8 @@ export async function spawnClaude(params: ClaudeSpawnParams): Promise