mirror of
https://github.com/affaan-m/everything-claude-code.git
synced 2026-02-16 03:13:08 +08:00
- session-manager.js: fix getSessionStats path detection to handle Windows paths (C:\...) in addition to Unix paths (/) - package-manager.js: add try-catch to setPreferredPackageManager for consistent error handling with setProjectPackageManager - validate-hooks.js: extract duplicated hook entry validation into reusable validateHookEntry() helper - Update .d.ts JSDoc for both fixes
132 lines
4.2 KiB
TypeScript
132 lines
4.2 KiB
TypeScript
/**
|
|
* Session Manager Library for Claude Code.
|
|
* Provides CRUD operations for session files stored as markdown in ~/.claude/sessions/.
|
|
*/
|
|
|
|
/** Parsed metadata from a session filename */
|
|
export interface SessionFilenameMeta {
|
|
/** Original filename */
|
|
filename: string;
|
|
/** Short ID extracted from filename, or "no-id" for old format */
|
|
shortId: string;
|
|
/** Date string in YYYY-MM-DD format */
|
|
date: string;
|
|
/** Parsed Date object from the date string */
|
|
datetime: Date;
|
|
}
|
|
|
|
/** Metadata parsed from session markdown content */
|
|
export interface SessionMetadata {
|
|
title: string | null;
|
|
date: string | null;
|
|
started: string | null;
|
|
lastUpdated: string | null;
|
|
completed: string[];
|
|
inProgress: string[];
|
|
notes: string;
|
|
context: string;
|
|
}
|
|
|
|
/** Statistics computed from session content */
|
|
export interface SessionStats {
|
|
totalItems: number;
|
|
completedItems: number;
|
|
inProgressItems: number;
|
|
lineCount: number;
|
|
hasNotes: boolean;
|
|
hasContext: boolean;
|
|
}
|
|
|
|
/** A session object returned by getAllSessions and getSessionById */
|
|
export interface Session extends SessionFilenameMeta {
|
|
/** Full filesystem path to the session file */
|
|
sessionPath: string;
|
|
/** Whether the file has any content */
|
|
hasContent?: boolean;
|
|
/** File size in bytes */
|
|
size: number;
|
|
/** Last modification time */
|
|
modifiedTime: Date;
|
|
/** File creation time (falls back to ctime on Linux) */
|
|
createdTime: Date;
|
|
/** Session markdown content (only when includeContent=true) */
|
|
content?: string | null;
|
|
/** Parsed metadata (only when includeContent=true) */
|
|
metadata?: SessionMetadata;
|
|
/** Session statistics (only when includeContent=true) */
|
|
stats?: SessionStats;
|
|
}
|
|
|
|
/** Pagination result from getAllSessions */
|
|
export interface SessionListResult {
|
|
sessions: Session[];
|
|
total: number;
|
|
offset: number;
|
|
limit: number;
|
|
hasMore: boolean;
|
|
}
|
|
|
|
export interface GetAllSessionsOptions {
|
|
/** Maximum number of sessions to return (default: 50) */
|
|
limit?: number;
|
|
/** Number of sessions to skip (default: 0) */
|
|
offset?: number;
|
|
/** Filter by date in YYYY-MM-DD format */
|
|
date?: string | null;
|
|
/** Search in short ID */
|
|
search?: string | null;
|
|
}
|
|
|
|
/**
|
|
* Parse a session filename to extract date and short ID.
|
|
* @returns Parsed metadata, or null if the filename doesn't match the expected pattern
|
|
*/
|
|
export function parseSessionFilename(filename: string): SessionFilenameMeta | null;
|
|
|
|
/** Get the full filesystem path for a session filename */
|
|
export function getSessionPath(filename: string): string;
|
|
|
|
/**
|
|
* Read session markdown content from disk.
|
|
* @returns Content string, or null if the file doesn't exist
|
|
*/
|
|
export function getSessionContent(sessionPath: string): string | null;
|
|
|
|
/** Parse session metadata from markdown content */
|
|
export function parseSessionMetadata(content: string | null): SessionMetadata;
|
|
|
|
/**
|
|
* Calculate statistics for a session.
|
|
* Accepts either a file path (absolute, ending in .tmp) or pre-read content string.
|
|
* Supports both Unix (/path/to/session.tmp) and Windows (C:\path\to\session.tmp) paths.
|
|
*/
|
|
export function getSessionStats(sessionPathOrContent: string): SessionStats;
|
|
|
|
/** Get the title from a session file, or "Untitled Session" if none */
|
|
export function getSessionTitle(sessionPath: string): string;
|
|
|
|
/** Get human-readable file size (e.g., "1.2 KB") */
|
|
export function getSessionSize(sessionPath: string): string;
|
|
|
|
/** Get all sessions with optional filtering and pagination */
|
|
export function getAllSessions(options?: GetAllSessionsOptions): SessionListResult;
|
|
|
|
/**
|
|
* Find a session by short ID or filename.
|
|
* @param sessionId - Short ID prefix, full filename, or filename without .tmp
|
|
* @param includeContent - Whether to read and parse the session content
|
|
*/
|
|
export function getSessionById(sessionId: string, includeContent?: boolean): Session | null;
|
|
|
|
/** Write markdown content to a session file */
|
|
export function writeSessionContent(sessionPath: string, content: string): boolean;
|
|
|
|
/** Append content to an existing session file */
|
|
export function appendSessionContent(sessionPath: string, content: string): boolean;
|
|
|
|
/** Delete a session file */
|
|
export function deleteSession(sessionPath: string): boolean;
|
|
|
|
/** Check if a session file exists and is a regular file */
|
|
export function sessionExists(sessionPath: string): boolean;
|