Files
claude-code/src/skills/bundled/dream.ts
2026-04-04 16:28:09 +08:00

45 lines
1.9 KiB
TypeScript

// Manual /dream skill — runs the memory consolidation prompt interactively.
// Extracted from the KAIROS feature gate so it's available unconditionally
// whenever auto-memory is enabled.
import { getAutoMemPath, isAutoMemoryEnabled } from '../../memdir/paths.js'
import { buildConsolidationPrompt } from '../../services/autoDream/consolidationPrompt.js'
import { recordConsolidation } from '../../services/autoDream/consolidationLock.js'
import { getOriginalCwd } from '../../bootstrap/state.js'
import { getProjectDir } from '../../utils/sessionStorage.js'
import { registerBundledSkill } from '../bundledSkills.js'
const DREAM_PROMPT_PREFIX = `# Dream: Memory Consolidation (manual run)
You are performing a manual dream — a reflective pass over your memory files. Unlike the automatic background dream, this run has full tool permissions and the user is watching. Synthesize what you've learned recently into durable, well-organized memories so that future sessions can orient quickly.
`
export function registerDreamSkill(): void {
registerBundledSkill({
name: 'dream',
description:
'Manually trigger memory consolidation — review, organize, and prune your auto-memory files.',
whenToUse:
'Use when the user says /dream or wants to manually consolidate memories, organize memory files, or clean up stale entries.',
userInvocable: true,
isEnabled: () => isAutoMemoryEnabled(),
async getPromptForCommand(args) {
const memoryRoot = getAutoMemPath()
const transcriptDir = getProjectDir(getOriginalCwd())
// Stamp the consolidation lock optimistically (same as the KAIROS path).
await recordConsolidation()
const basePrompt = buildConsolidationPrompt(memoryRoot, transcriptDir, '')
let prompt = DREAM_PROMPT_PREFIX + basePrompt
if (args) {
prompt += `\n\n## Additional context from user\n\n${args}`
}
return [{ type: 'text', text: prompt }]
},
})
}