mirror of
https://github.com/affaan-m/everything-claude-code.git
synced 2026-02-16 03:13:08 +08:00
131 lines
4.1 KiB
TypeScript
131 lines
4.1 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 (ending in .tmp) or pre-read content string.
|
||
|
|
*/
|
||
|
|
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;
|