30b142d318
This commit fixes the session ID confusion identified in PR #475: PROBLEM: - Using contentSessionId (user's Claude Code session) for SDK resume was wrong - Memory agent conversation should persist across the entire user session - Each SDK call was starting fresh, losing memory agent continuity SOLUTION: 1. Semantic Renaming (clarity): - claudeSessionId → contentSessionId (user's observed session) - sdkSessionId → memorySessionId (memory agent's session for resume) - Database migration 17 renames columns accordingly 2. Memory Session ID Capture: - SDKAgent captures session_id from first SDK message - Persists to database via updateMemorySessionId() - SessionManager loads memorySessionId on session init 3. Resume Logic Fixed: - Only resume if memorySessionId captured from previous interaction - Enables memory agent continuity across user prompts Files changed: 33 (types, database, agents, hooks, routes) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
140 lines
2.7 KiB
TypeScript
140 lines
2.7 KiB
TypeScript
/**
|
|
* TypeScript types for database query results
|
|
* Provides type safety for bun:sqlite query results
|
|
*/
|
|
|
|
/**
|
|
* Schema information from sqlite3 PRAGMA table_info
|
|
*/
|
|
export interface TableColumnInfo {
|
|
cid: number;
|
|
name: string;
|
|
type: string;
|
|
notnull: number;
|
|
dflt_value: string | null;
|
|
pk: number;
|
|
}
|
|
|
|
/**
|
|
* Index information from sqlite3 PRAGMA index_list
|
|
*/
|
|
export interface IndexInfo {
|
|
seq: number;
|
|
name: string;
|
|
unique: number;
|
|
origin: string;
|
|
partial: number;
|
|
}
|
|
|
|
/**
|
|
* Table name from sqlite_master
|
|
*/
|
|
export interface TableNameRow {
|
|
name: string;
|
|
}
|
|
|
|
/**
|
|
* Schema version record
|
|
*/
|
|
export interface SchemaVersion {
|
|
version: number;
|
|
}
|
|
|
|
/**
|
|
* SDK Session database record
|
|
*/
|
|
export interface SdkSessionRecord {
|
|
id: number;
|
|
content_session_id: string;
|
|
memory_session_id: string | null;
|
|
project: string;
|
|
user_prompt: string | null;
|
|
started_at: string;
|
|
started_at_epoch: number;
|
|
completed_at: string | null;
|
|
completed_at_epoch: number | null;
|
|
status: 'active' | 'completed' | 'failed';
|
|
worker_port?: number;
|
|
prompt_counter?: number;
|
|
}
|
|
|
|
/**
|
|
* Observation database record
|
|
*/
|
|
export interface ObservationRecord {
|
|
id: number;
|
|
memory_session_id: string;
|
|
project: string;
|
|
text: string | null;
|
|
type: 'decision' | 'bugfix' | 'feature' | 'refactor' | 'discovery' | 'change';
|
|
created_at: string;
|
|
created_at_epoch: number;
|
|
title?: string;
|
|
concept?: string;
|
|
source_files?: string;
|
|
prompt_number?: number;
|
|
discovery_tokens?: number;
|
|
}
|
|
|
|
/**
|
|
* Session Summary database record
|
|
*/
|
|
export interface SessionSummaryRecord {
|
|
id: number;
|
|
memory_session_id: string;
|
|
project: string;
|
|
request: string | null;
|
|
investigated: string | null;
|
|
learned: string | null;
|
|
completed: string | null;
|
|
next_steps: string | null;
|
|
created_at: string;
|
|
created_at_epoch: number;
|
|
prompt_number?: number;
|
|
discovery_tokens?: number;
|
|
}
|
|
|
|
/**
|
|
* User Prompt database record
|
|
*/
|
|
export interface UserPromptRecord {
|
|
id: number;
|
|
content_session_id: string;
|
|
prompt_number: number;
|
|
prompt_text: string;
|
|
project?: string; // From JOIN with sdk_sessions
|
|
created_at: string;
|
|
created_at_epoch: number;
|
|
}
|
|
|
|
/**
|
|
* Latest user prompt with session join
|
|
*/
|
|
export interface LatestPromptResult {
|
|
id: number;
|
|
content_session_id: string;
|
|
memory_session_id: string;
|
|
project: string;
|
|
prompt_number: number;
|
|
prompt_text: string;
|
|
created_at_epoch: number;
|
|
}
|
|
|
|
/**
|
|
* Observation with context (for time-based queries)
|
|
*/
|
|
export interface ObservationWithContext {
|
|
id: number;
|
|
memory_session_id: string;
|
|
project: string;
|
|
text: string | null;
|
|
type: string;
|
|
created_at: string;
|
|
created_at_epoch: number;
|
|
title?: string;
|
|
concept?: string;
|
|
source_files?: string;
|
|
prompt_number?: number;
|
|
discovery_tokens?: number;
|
|
}
|