mirror of
https://github.com/codeaashu/claude-code.git
synced 2026-04-12 16:09:53 +03:00
claude-code
This commit is contained in:
146
src/commands/clear/caches.ts
Normal file
146
src/commands/clear/caches.ts
Normal file
@@ -0,0 +1,146 @@
|
||||
/**
|
||||
* Session cache clearing utilities.
|
||||
* This module is imported at startup by main.tsx, so keep imports minimal.
|
||||
*/
|
||||
import { feature } from 'bun:bundle'
|
||||
import {
|
||||
clearInvokedSkills,
|
||||
setLastEmittedDate,
|
||||
} from '../../bootstrap/state.js'
|
||||
import { clearCommandsCache } from '../../commands.js'
|
||||
import { getSessionStartDate } from '../../constants/common.js'
|
||||
import {
|
||||
getGitStatus,
|
||||
getSystemContext,
|
||||
getUserContext,
|
||||
setSystemPromptInjection,
|
||||
} from '../../context.js'
|
||||
import { clearFileSuggestionCaches } from '../../hooks/fileSuggestions.js'
|
||||
import { clearAllPendingCallbacks } from '../../hooks/useSwarmPermissionPoller.js'
|
||||
import { clearAllDumpState } from '../../services/api/dumpPrompts.js'
|
||||
import { resetPromptCacheBreakDetection } from '../../services/api/promptCacheBreakDetection.js'
|
||||
import { clearAllSessions } from '../../services/api/sessionIngress.js'
|
||||
import { runPostCompactCleanup } from '../../services/compact/postCompactCleanup.js'
|
||||
import { resetAllLSPDiagnosticState } from '../../services/lsp/LSPDiagnosticRegistry.js'
|
||||
import { clearTrackedMagicDocs } from '../../services/MagicDocs/magicDocs.js'
|
||||
import { clearDynamicSkills } from '../../skills/loadSkillsDir.js'
|
||||
import { resetSentSkillNames } from '../../utils/attachments.js'
|
||||
import { clearCommandPrefixCaches } from '../../utils/bash/commands.js'
|
||||
import { resetGetMemoryFilesCache } from '../../utils/claudemd.js'
|
||||
import { clearRepositoryCaches } from '../../utils/detectRepository.js'
|
||||
import { clearResolveGitDirCache } from '../../utils/git/gitFilesystem.js'
|
||||
import { clearStoredImagePaths } from '../../utils/imageStore.js'
|
||||
import { clearSessionEnvVars } from '../../utils/sessionEnvVars.js'
|
||||
|
||||
/**
|
||||
* Clear all session-related caches.
|
||||
* Call this when resuming a session to ensure fresh file/skill discovery.
|
||||
* This is a subset of what clearConversation does - it only clears caches
|
||||
* without affecting messages, session ID, or triggering hooks.
|
||||
*
|
||||
* @param preservedAgentIds - Agent IDs whose per-agent state should survive
|
||||
* the clear (e.g., background tasks preserved across /clear). When non-empty,
|
||||
* agentId-keyed state (invoked skills) is selectively cleared and requestId-keyed
|
||||
* state (pending permission callbacks, dump state, cache-break tracking) is left
|
||||
* intact since it cannot be safely scoped to the main session.
|
||||
*/
|
||||
export function clearSessionCaches(
|
||||
preservedAgentIds: ReadonlySet<string> = new Set(),
|
||||
): void {
|
||||
const hasPreserved = preservedAgentIds.size > 0
|
||||
// Clear context caches
|
||||
getUserContext.cache.clear?.()
|
||||
getSystemContext.cache.clear?.()
|
||||
getGitStatus.cache.clear?.()
|
||||
getSessionStartDate.cache.clear?.()
|
||||
// Clear file suggestion caches (for @ mentions)
|
||||
clearFileSuggestionCaches()
|
||||
|
||||
// Clear commands/skills cache
|
||||
clearCommandsCache()
|
||||
|
||||
// Clear prompt cache break detection state
|
||||
if (!hasPreserved) resetPromptCacheBreakDetection()
|
||||
|
||||
// Clear system prompt injection (cache breaker)
|
||||
setSystemPromptInjection(null)
|
||||
|
||||
// Clear last emitted date so it's re-detected on next turn
|
||||
setLastEmittedDate(null)
|
||||
|
||||
// Run post-compaction cleanup (clears system prompt sections, microcompact tracking,
|
||||
// classifier approvals, speculative checks, and — for main-thread compacts — memory
|
||||
// files cache with load_reason 'compact').
|
||||
runPostCompactCleanup()
|
||||
// Reset sent skill names so the skill listing is re-sent after /clear.
|
||||
// runPostCompactCleanup intentionally does NOT reset this (post-compact
|
||||
// re-injection costs ~4K tokens), but /clear wipes messages entirely so
|
||||
// the model needs the full listing again.
|
||||
resetSentSkillNames()
|
||||
// Override the memory cache reset with 'session_start': clearSessionCaches is called
|
||||
// from /clear and --resume/--continue, which are NOT compaction events. Without this,
|
||||
// the InstructionsLoaded hook would fire with load_reason 'compact' instead of
|
||||
// 'session_start' on the next getMemoryFiles() call.
|
||||
resetGetMemoryFilesCache('session_start')
|
||||
|
||||
// Clear stored image paths cache
|
||||
clearStoredImagePaths()
|
||||
|
||||
// Clear all session ingress caches (lastUuidMap, sequentialAppendBySession)
|
||||
clearAllSessions()
|
||||
// Clear swarm permission pending callbacks
|
||||
if (!hasPreserved) clearAllPendingCallbacks()
|
||||
|
||||
// Clear tungsten session usage tracking
|
||||
if (process.env.USER_TYPE === 'ant') {
|
||||
void import('../../tools/TungstenTool/TungstenTool.js').then(
|
||||
({ clearSessionsWithTungstenUsage, resetInitializationState }) => {
|
||||
clearSessionsWithTungstenUsage()
|
||||
resetInitializationState()
|
||||
},
|
||||
)
|
||||
}
|
||||
// Clear attribution caches (file content cache, pending bash states)
|
||||
// Dynamic import to preserve dead code elimination for COMMIT_ATTRIBUTION feature flag
|
||||
if (feature('COMMIT_ATTRIBUTION')) {
|
||||
void import('../../utils/attributionHooks.js').then(
|
||||
({ clearAttributionCaches }) => clearAttributionCaches(),
|
||||
)
|
||||
}
|
||||
// Clear repository detection caches
|
||||
clearRepositoryCaches()
|
||||
// Clear bash command prefix caches (Haiku-extracted prefixes)
|
||||
clearCommandPrefixCaches()
|
||||
// Clear dump prompts state
|
||||
if (!hasPreserved) clearAllDumpState()
|
||||
// Clear invoked skills cache (each entry holds full skill file content)
|
||||
clearInvokedSkills(preservedAgentIds)
|
||||
// Clear git dir resolution cache
|
||||
clearResolveGitDirCache()
|
||||
// Clear dynamic skills (loaded from skill directories)
|
||||
clearDynamicSkills()
|
||||
// Clear LSP diagnostic tracking state
|
||||
resetAllLSPDiagnosticState()
|
||||
// Clear tracked magic docs
|
||||
clearTrackedMagicDocs()
|
||||
// Clear session environment variables
|
||||
clearSessionEnvVars()
|
||||
// Clear WebFetch URL cache (up to 50MB of cached page content)
|
||||
void import('../../tools/WebFetchTool/utils.js').then(
|
||||
({ clearWebFetchCache }) => clearWebFetchCache(),
|
||||
)
|
||||
// Clear ToolSearch description cache (full tool prompts, ~500KB for 50 MCP tools)
|
||||
void import('../../tools/ToolSearchTool/ToolSearchTool.js').then(
|
||||
({ clearToolSearchDescriptionCache }) => clearToolSearchDescriptionCache(),
|
||||
)
|
||||
// Clear agent definitions cache (accumulates per-cwd via EnterWorktreeTool)
|
||||
void import('../../tools/AgentTool/loadAgentsDir.js').then(
|
||||
({ clearAgentDefinitionsCache }) => clearAgentDefinitionsCache(),
|
||||
)
|
||||
// Clear SkillTool prompt cache (accumulates per project root)
|
||||
void import('../../tools/SkillTool/prompt.js').then(({ clearPromptCache }) =>
|
||||
clearPromptCache(),
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user