caches.ts
commands/clear/caches.ts
145
Lines
6370
Bytes
1
Exports
21
Imports
10
Keywords
What this is
This page documents one file from the repository and includes its full source so you can read it without leaving the docs site.
Beginner explanation
This file lives in the command layer. It likely turns a user action into concrete program behavior.
How it is used
Start from the exports list and related files. Those are the easiest clues for where this file fits into the system.
Expert explanation
Architecturally, this file intersects with commands. It contains 145 lines, 21 detected imports, and 1 detected exports.
Important relationships
Detected exports
clearSessionCaches
Keywords
clearcacheutilscachessessionvoidservicestoolsthenskills
Detected imports
bun:bundle../../bootstrap/state.js../../commands.js../../constants/common.js../../context.js../../hooks/fileSuggestions.js../../hooks/useSwarmPermissionPoller.js../../services/api/dumpPrompts.js../../services/api/promptCacheBreakDetection.js../../services/api/sessionIngress.js../../services/compact/postCompactCleanup.js../../services/lsp/LSPDiagnosticRegistry.js../../services/MagicDocs/magicDocs.js../../skills/loadSkillsDir.js../../utils/attachments.js../../utils/bash/commands.js../../utils/claudemd.js../../utils/detectRepository.js../../utils/git/gitFilesystem.js../../utils/imageStore.js../../utils/sessionEnvVars.js
Source notes
This page embeds the full file contents. Small or leaf files are still indexed honestly instead of being over-explained.
Full source
/**
* 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(),
)
}