Fix critical bugs in export/import feature (PR #225)
Addressed all 6 bugs identified in code reviews: CRITICAL FIXES: 1. SessionStore.ts: Fixed concepts filter bug - removed empty params.push() that was breaking SQL parameter alignment (line 849) 2. import-memories.ts: Removed worker_port and prompt_counter fields from sdk_sessions insert to fix schema mismatch with fresh databases 3. export-memories.ts: Fixed hardcoded port - now reads from settings via SettingsDefaultsManager.loadFromFile() HIGH PRIORITY: 4. export-memories.ts: Added database existence check with clear error message before opening database connection 5. export-memories.ts: Fixed variable shadowing - renamed local 'query' variable to 'sessionQuery' (line 90) MEDIUM PRIORITY: 6. export-memories.ts: Improved type safety - added ObservationRecord, SdkSessionRecord, SessionSummaryRecord, UserPromptRecord interfaces All fixes tested and verified: - Export script successfully exports with project filtering - Import script works on existing database with duplicate prevention - Port configuration read from settings.json - Type safety improvements prevent compile-time errors 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -254,7 +254,7 @@ ${e.stack}`:e.message;if(Array.isArray(e))return`[${e.length} items]`;let s=Obje
|
||||
SELECT *
|
||||
FROM observations
|
||||
WHERE id = ?
|
||||
`).get(e)||null}getObservationsByIds(e,s={}){if(e.length===0)return[];let{orderBy:r="date_desc",limit:n,project:i,type:a,concepts:d,files:_}=s,E=r==="date_asc"?"ASC":"DESC",l=n?`LIMIT ${n}`:"",g=e.map(()=>"?").join(","),f=[...e],m=[];if(i&&(m.push("project = ?"),f.push(i)),a)if(Array.isArray(a)){let t=a.map(()=>"?").join(",");m.push(`type IN (${t})`),f.push(...a)}else m.push("type = ?"),f.push(a);if(d){let t=Array.isArray(d)?d:[d],N=t.map(()=>(f.push(),"EXISTS (SELECT 1 FROM json_each(concepts) WHERE value = ?)"));f.push(...t),m.push(`(${N.join(" OR ")})`)}if(_){let t=Array.isArray(_)?_:[_],N=t.map(()=>"(EXISTS (SELECT 1 FROM json_each(files_read) WHERE value LIKE ?) OR EXISTS (SELECT 1 FROM json_each(files_modified) WHERE value LIKE ?))");t.forEach(R=>{f.push(`%${R}%`,`%${R}%`)}),m.push(`(${N.join(" OR ")})`)}let I=m.length>0?`WHERE id IN (${g}) AND ${m.join(" AND ")}`:`WHERE id IN (${g})`;return this.db.prepare(`
|
||||
`).get(e)||null}getObservationsByIds(e,s={}){if(e.length===0)return[];let{orderBy:r="date_desc",limit:n,project:i,type:a,concepts:d,files:_}=s,E=r==="date_asc"?"ASC":"DESC",l=n?`LIMIT ${n}`:"",g=e.map(()=>"?").join(","),f=[...e],m=[];if(i&&(m.push("project = ?"),f.push(i)),a)if(Array.isArray(a)){let t=a.map(()=>"?").join(",");m.push(`type IN (${t})`),f.push(...a)}else m.push("type = ?"),f.push(a);if(d){let t=Array.isArray(d)?d:[d],N=t.map(()=>"EXISTS (SELECT 1 FROM json_each(concepts) WHERE value = ?)");f.push(...t),m.push(`(${N.join(" OR ")})`)}if(_){let t=Array.isArray(_)?_:[_],N=t.map(()=>"(EXISTS (SELECT 1 FROM json_each(files_read) WHERE value LIKE ?) OR EXISTS (SELECT 1 FROM json_each(files_modified) WHERE value LIKE ?))");t.forEach(R=>{f.push(`%${R}%`,`%${R}%`)}),m.push(`(${N.join(" OR ")})`)}let I=m.length>0?`WHERE id IN (${g}) AND ${m.join(" AND ")}`:`WHERE id IN (${g})`;return this.db.prepare(`
|
||||
SELECT *
|
||||
FROM observations
|
||||
${I}
|
||||
|
||||
Reference in New Issue
Block a user