mirror of
https://github.com/affaan-m/everything-claude-code.git
synced 2026-02-04 05:33:14 +08:00
Add a new /sessions command to manage Claude Code session history with alias support for quick access to previous sessions. Features: - List sessions with pagination and filtering (by date, ID) - Load and view session content and metadata - Create memorable aliases for sessions - Remove aliases - Display session statistics (lines, items, size) - List all aliases New libraries: - scripts/lib/session-manager.js - Core session CRUD operations - scripts/lib/session-aliases.js - Alias management with atomic saves New command: - commands/sessions.md - Complete command with embedded scripts Modified: - scripts/lib/utils.js - Add getAliasesPath() export - scripts/hooks/session-start.js - Show available aliases on session start Session format support: - Old: YYYY-MM-DD-session.tmp - New: YYYY-MM-DD-<short-id>-session.tmp Aliases are stored in ~/.claude/session-aliases.json with Windows- compatible atomic writes and backup support. Co-authored-by: 王志坚 <wangzhijian10@bgyfw.com> Co-authored-by: Claude <noreply@anthropic.com>
72 lines
2.2 KiB
JavaScript
72 lines
2.2 KiB
JavaScript
#!/usr/bin/env node
|
|
/**
|
|
* SessionStart Hook - Load previous context on new session
|
|
*
|
|
* Cross-platform (Windows, macOS, Linux)
|
|
*
|
|
* Runs when a new Claude session starts. Checks for recent session
|
|
* files and notifies Claude of available context to load.
|
|
*/
|
|
|
|
const {
|
|
getSessionsDir,
|
|
getLearnedSkillsDir,
|
|
findFiles,
|
|
ensureDir,
|
|
log
|
|
} = require('../lib/utils');
|
|
const { getPackageManager, getSelectionPrompt } = require('../lib/package-manager');
|
|
const { listAliases } = require('../lib/session-aliases');
|
|
|
|
async function main() {
|
|
const sessionsDir = getSessionsDir();
|
|
const learnedDir = getLearnedSkillsDir();
|
|
|
|
// Ensure directories exist
|
|
ensureDir(sessionsDir);
|
|
ensureDir(learnedDir);
|
|
|
|
// Check for recent session files (last 7 days)
|
|
// Match both old format (YYYY-MM-DD-session.tmp) and new format (YYYY-MM-DD-shortid-session.tmp)
|
|
const recentSessions = findFiles(sessionsDir, '*-session.tmp', { maxAge: 7 });
|
|
|
|
if (recentSessions.length > 0) {
|
|
const latest = recentSessions[0];
|
|
log(`[SessionStart] Found ${recentSessions.length} recent session(s)`);
|
|
log(`[SessionStart] Latest: ${latest.path}`);
|
|
}
|
|
|
|
// Check for learned skills
|
|
const learnedSkills = findFiles(learnedDir, '*.md');
|
|
|
|
if (learnedSkills.length > 0) {
|
|
log(`[SessionStart] ${learnedSkills.length} learned skill(s) available in ${learnedDir}`);
|
|
}
|
|
|
|
// Check for available session aliases
|
|
const aliases = listAliases({ limit: 5 });
|
|
|
|
if (aliases.length > 0) {
|
|
const aliasNames = aliases.map(a => a.name).join(', ');
|
|
log(`[SessionStart] ${aliases.length} session alias(es) available: ${aliasNames}`);
|
|
log(`[SessionStart] Use /sessions load <alias> to continue a previous session`);
|
|
}
|
|
|
|
// Detect and report package manager
|
|
const pm = getPackageManager();
|
|
log(`[SessionStart] Package manager: ${pm.name} (${pm.source})`);
|
|
|
|
// If package manager was detected via fallback, show selection prompt
|
|
if (pm.source === 'fallback' || pm.source === 'default') {
|
|
log('[SessionStart] No package manager preference found.');
|
|
log(getSelectionPrompt());
|
|
}
|
|
|
|
process.exit(0);
|
|
}
|
|
|
|
main().catch(err => {
|
|
console.error('[SessionStart] Error:', err.message);
|
|
process.exit(0); // Don't block on errors
|
|
});
|