a2a-memory 0.8.1 → 0.8.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (130) hide show
  1. package/dist/adapters/anthropic.d.ts.map +1 -1
  2. package/dist/adapters/anthropic.js +1 -0
  3. package/dist/adapters/anthropic.js.map +1 -1
  4. package/dist/claude/sync.js +6 -6
  5. package/dist/claude/sync.js.map +1 -1
  6. package/dist/cli/commands/config.d.ts.map +1 -1
  7. package/dist/cli/commands/config.js +16 -1
  8. package/dist/cli/commands/config.js.map +1 -1
  9. package/dist/cli/commands/health.d.ts.map +1 -1
  10. package/dist/cli/commands/health.js +3 -6
  11. package/dist/cli/commands/health.js.map +1 -1
  12. package/dist/cli/commands/proficiency.d.ts +8 -0
  13. package/dist/cli/commands/proficiency.d.ts.map +1 -0
  14. package/dist/cli/commands/proficiency.js +142 -0
  15. package/dist/cli/commands/proficiency.js.map +1 -0
  16. package/dist/cli/commands/skill.d.ts +8 -0
  17. package/dist/cli/commands/skill.d.ts.map +1 -0
  18. package/dist/cli/commands/skill.js +136 -0
  19. package/dist/cli/commands/skill.js.map +1 -0
  20. package/dist/cli/commands/sync.d.ts.map +1 -1
  21. package/dist/cli/commands/sync.js +15 -10
  22. package/dist/cli/commands/sync.js.map +1 -1
  23. package/dist/cli/commands/team.d.ts.map +1 -1
  24. package/dist/cli/commands/team.js +0 -2
  25. package/dist/cli/commands/team.js.map +1 -1
  26. package/dist/cli/index.js +4 -0
  27. package/dist/cli/index.js.map +1 -1
  28. package/dist/config/manager.d.ts +682 -0
  29. package/dist/config/manager.d.ts.map +1 -1
  30. package/dist/config/manager.js +77 -2
  31. package/dist/config/manager.js.map +1 -1
  32. package/dist/db/database.d.ts +65 -0
  33. package/dist/db/database.d.ts.map +1 -1
  34. package/dist/db/database.js +276 -3
  35. package/dist/db/database.js.map +1 -1
  36. package/dist/extraction/extractor.d.ts +4 -0
  37. package/dist/extraction/extractor.d.ts.map +1 -1
  38. package/dist/extraction/extractor.js +261 -38
  39. package/dist/extraction/extractor.js.map +1 -1
  40. package/dist/extraction/scorer.js +5 -3
  41. package/dist/extraction/scorer.js.map +1 -1
  42. package/dist/hooks/post-tool-use.d.ts.map +1 -1
  43. package/dist/hooks/post-tool-use.js +78 -15
  44. package/dist/hooks/post-tool-use.js.map +1 -1
  45. package/dist/hooks/session-end.d.ts.map +1 -1
  46. package/dist/hooks/session-end.js +57 -4
  47. package/dist/hooks/session-end.js.map +1 -1
  48. package/dist/hooks/session-start.d.ts.map +1 -1
  49. package/dist/hooks/session-start.js +104 -36
  50. package/dist/hooks/session-start.js.map +1 -1
  51. package/dist/index.d.ts +3 -0
  52. package/dist/index.d.ts.map +1 -1
  53. package/dist/index.js +2 -0
  54. package/dist/index.js.map +1 -1
  55. package/dist/lifecycle/cleanup.d.ts.map +1 -1
  56. package/dist/lifecycle/cleanup.js +2 -1
  57. package/dist/lifecycle/cleanup.js.map +1 -1
  58. package/dist/llm/client.d.ts +22 -0
  59. package/dist/llm/client.d.ts.map +1 -1
  60. package/dist/llm/client.js +74 -2
  61. package/dist/llm/client.js.map +1 -1
  62. package/dist/proficiency/actr-engine.d.ts +55 -0
  63. package/dist/proficiency/actr-engine.d.ts.map +1 -0
  64. package/dist/proficiency/actr-engine.js +106 -0
  65. package/dist/proficiency/actr-engine.js.map +1 -0
  66. package/dist/proficiency/index.d.ts +9 -0
  67. package/dist/proficiency/index.d.ts.map +1 -0
  68. package/dist/proficiency/index.js +8 -0
  69. package/dist/proficiency/index.js.map +1 -0
  70. package/dist/proficiency/tracker.d.ts +50 -0
  71. package/dist/proficiency/tracker.d.ts.map +1 -0
  72. package/dist/proficiency/tracker.js +170 -0
  73. package/dist/proficiency/tracker.js.map +1 -0
  74. package/dist/proficiency/types.d.ts +60 -0
  75. package/dist/proficiency/types.d.ts.map +1 -0
  76. package/dist/proficiency/types.js +8 -0
  77. package/dist/proficiency/types.js.map +1 -0
  78. package/dist/providers/adapters.d.ts +54 -0
  79. package/dist/providers/adapters.d.ts.map +1 -0
  80. package/dist/providers/adapters.js +140 -0
  81. package/dist/providers/adapters.js.map +1 -0
  82. package/dist/providers/detector.d.ts +17 -0
  83. package/dist/providers/detector.d.ts.map +1 -0
  84. package/dist/providers/detector.js +57 -0
  85. package/dist/providers/detector.js.map +1 -0
  86. package/dist/search/ranker.d.ts +26 -2
  87. package/dist/search/ranker.d.ts.map +1 -1
  88. package/dist/search/ranker.js +121 -46
  89. package/dist/search/ranker.js.map +1 -1
  90. package/dist/session/parser.d.ts.map +1 -1
  91. package/dist/session/parser.js +1 -0
  92. package/dist/session/parser.js.map +1 -1
  93. package/dist/skill/evaluator.d.ts +57 -0
  94. package/dist/skill/evaluator.d.ts.map +1 -0
  95. package/dist/skill/evaluator.js +373 -0
  96. package/dist/skill/evaluator.js.map +1 -0
  97. package/dist/skill/index.d.ts +8 -0
  98. package/dist/skill/index.d.ts.map +1 -0
  99. package/dist/skill/index.js +7 -0
  100. package/dist/skill/index.js.map +1 -0
  101. package/dist/skill/types.d.ts +34 -0
  102. package/dist/skill/types.d.ts.map +1 -0
  103. package/dist/skill/types.js +7 -0
  104. package/dist/skill/types.js.map +1 -0
  105. package/dist/sync/client.js +1 -1
  106. package/dist/sync/queue.d.ts +1 -0
  107. package/dist/sync/queue.d.ts.map +1 -1
  108. package/dist/sync/queue.js +33 -5
  109. package/dist/sync/queue.js.map +1 -1
  110. package/dist/sync/synchronizer.js +1 -1
  111. package/dist/sync/synchronizer.js.map +1 -1
  112. package/dist/sync/team-synchronizer.d.ts +6 -2
  113. package/dist/sync/team-synchronizer.d.ts.map +1 -1
  114. package/dist/sync/team-synchronizer.js +84 -6
  115. package/dist/sync/team-synchronizer.js.map +1 -1
  116. package/dist/sync/vector-clock.d.ts +7 -0
  117. package/dist/sync/vector-clock.d.ts.map +1 -1
  118. package/dist/sync/vector-clock.js +30 -0
  119. package/dist/sync/vector-clock.js.map +1 -1
  120. package/dist/types/index.d.ts +27 -1
  121. package/dist/types/index.d.ts.map +1 -1
  122. package/dist/types/index.js +24 -1
  123. package/dist/types/index.js.map +1 -1
  124. package/dist/utils/keychain.d.ts.map +1 -1
  125. package/dist/utils/keychain.js +4 -0
  126. package/dist/utils/keychain.js.map +1 -1
  127. package/dist/utils/logger.d.ts.map +1 -1
  128. package/dist/utils/logger.js +12 -2
  129. package/dist/utils/logger.js.map +1 -1
  130. package/package.json +1 -1
@@ -12,7 +12,7 @@ import { DEFAULT_CONFIG } from '../types/index.js';
12
12
  import { getKeychainStore } from '../utils/keychain.js';
13
13
  const DEFAULT_CONFIG_DIR = join(homedir(), '.a2a');
14
14
  const DEFAULT_CONFIG_PATH = join(DEFAULT_CONFIG_DIR, 'config.json');
15
- const ConfigSchema = z.object({
15
+ export const ConfigSchema = z.object({
16
16
  server: z.object({
17
17
  url: z.string().url(),
18
18
  apiKey: z.string().optional(),
@@ -110,6 +110,50 @@ const ConfigSchema = z.object({
110
110
  maxFileSizeMB: 10,
111
111
  maxFiles: 3,
112
112
  }),
113
+ skillConversion: z.object({
114
+ enabled: z.boolean(),
115
+ evaluationInterval: z.number().int().positive(),
116
+ minRepetitions: z.number().int().positive(),
117
+ similarityThreshold: z.number().min(0).max(1),
118
+ minConfidence: z.number().min(0).max(1),
119
+ reviewCycleDays: z.number().int().positive(),
120
+ maxSkills: z.number().int().positive(),
121
+ llmValidation: z.boolean(),
122
+ }).optional().default({
123
+ enabled: false,
124
+ evaluationInterval: 5,
125
+ minRepetitions: 3,
126
+ similarityThreshold: 0.85,
127
+ minConfidence: 0.7,
128
+ reviewCycleDays: 90,
129
+ maxSkills: 50,
130
+ llmValidation: true,
131
+ }),
132
+ proficiency: z.object({
133
+ enabled: z.boolean(),
134
+ actr: z.object({
135
+ decayRate: z.number().nonnegative(),
136
+ baseLevelConstant: z.number(),
137
+ maxAssociativeStrength: z.number().nonnegative(),
138
+ fanEffectFactor: z.number().nonnegative(),
139
+ mismatchPenalty: z.number().nonnegative(),
140
+ retrievalThreshold: z.number(),
141
+ }),
142
+ levelFormula: z.enum(['activation', 'powerLaw']),
143
+ maxLevel: z.number().int().min(1).max(100),
144
+ }).optional().default({
145
+ enabled: false,
146
+ actr: {
147
+ decayRate: 0.5,
148
+ baseLevelConstant: 0.0,
149
+ maxAssociativeStrength: 2.0,
150
+ fanEffectFactor: 1.0,
151
+ mismatchPenalty: 1.0,
152
+ retrievalThreshold: 0.0,
153
+ },
154
+ levelFormula: 'activation',
155
+ maxLevel: 10,
156
+ }),
113
157
  locale: z.enum(['en', 'ko']).optional(),
114
158
  }).refine((data) => data.mode !== 'team' || data.team !== undefined, { message: "Team configuration is required when mode is 'team'" });
115
159
  /**
@@ -122,6 +166,7 @@ export class ConfigManager {
122
166
  configPath;
123
167
  config = null;
124
168
  lastMtime = 0;
169
+ _validationFailed = false;
125
170
  constructor(configPath) {
126
171
  // 환경변수 우선 (테스트용)
127
172
  this.configPath = configPath ?? process.env.A2A_CONFIG_PATH ?? DEFAULT_CONFIG_PATH;
@@ -150,6 +195,7 @@ export class ConfigManager {
150
195
  const parsed = JSON.parse(raw);
151
196
  const validated = ConfigSchema.parse(parsed);
152
197
  this.config = validated;
198
+ this._validationFailed = false; // 검증 성공
153
199
  // 키체인에서 API 키 로드 (config에 없을 때)
154
200
  if (!this.config.server.apiKey) {
155
201
  try {
@@ -166,18 +212,46 @@ export class ConfigManager {
166
212
  return this.config;
167
213
  }
168
214
  catch (err) {
169
- console.error('[a2a] Invalid config, using defaults:', err);
215
+ // 검증 실패 플래그 설정 + 원본 백업
216
+ this._validationFailed = true;
217
+ // 원본 백업
218
+ try {
219
+ const backupPath = this.configPath + '.bak';
220
+ const original = readFileSync(this.configPath, 'utf-8');
221
+ writeFileSync(backupPath, original, 'utf-8');
222
+ }
223
+ catch {
224
+ // 백업 실패 무시 (읽기 전용 파일 시스템 등)
225
+ }
226
+ // 검증 실패 원인 출력
227
+ if (err instanceof z.ZodError) {
228
+ console.error('[a2a] Config validation failed. Backup saved to config.json.bak');
229
+ console.error('[a2a] Invalid fields:');
230
+ for (const issue of err.issues) {
231
+ console.error(` ${issue.path.join('.')}: ${issue.message}`);
232
+ }
233
+ }
234
+ else {
235
+ console.error('[a2a] Config file corrupted:', err instanceof Error ? err.message : String(err));
236
+ }
237
+ console.error('[a2a] Using default configuration. Fix the errors and restart, or use "a2a config reset".');
170
238
  this.config = { ...DEFAULT_CONFIG };
171
239
  return this.config;
172
240
  }
173
241
  }
174
242
  save(config) {
243
+ // 검증 실패 상태에서 save 시 경고
244
+ if (this._validationFailed) {
245
+ console.warn('[a2a] Warning: Previous config validation failed. Saving may overwrite your original settings.');
246
+ console.warn('[a2a] Original config backed up to config.json.bak');
247
+ }
175
248
  const dir = dirname(this.configPath);
176
249
  if (!existsSync(dir)) {
177
250
  mkdirSync(dir, { recursive: true });
178
251
  }
179
252
  writeFileSync(this.configPath, JSON.stringify(config, null, 2), 'utf-8');
180
253
  this.config = config;
254
+ this._validationFailed = false; // 저장 성공 시 플래그 리셋
181
255
  try {
182
256
  this.lastMtime = statSync(this.configPath).mtimeMs;
183
257
  }
@@ -229,6 +303,7 @@ export class ConfigManager {
229
303
  }
230
304
  reset() {
231
305
  this.config = { ...DEFAULT_CONFIG };
306
+ this._validationFailed = false; // 리셋 시 플래그 해제
232
307
  this.save(this.config);
233
308
  }
234
309
  getConfigDir() {
@@ -1 +1 @@
1
- {"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/config/manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/config/manager.ts"],"names":[],"mappings":"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"}
@@ -5,6 +5,7 @@
5
5
  * better-sqlite3 (동기 API) 사용.
6
6
  */
7
7
  import type { Memory, MemoryCreateInput, MemorySearchOptions, MemorySearchResult, MemoryCategory, MemoryTier, QuantizationLevel } from '../types/index.js';
8
+ import type { ProficiencyRecord, ExperienceEvent } from '../proficiency/types.js';
8
9
  export declare class MemoryDatabase {
9
10
  private db;
10
11
  private dbPath;
@@ -34,6 +35,7 @@ export declare class MemoryDatabase {
34
35
  messageCount: number;
35
36
  processedAt: string;
36
37
  } | null;
38
+ getSessionCount(projectPath?: string): number;
37
39
  getStats(): {
38
40
  totalMemories: number;
39
41
  totalSessions: number;
@@ -53,6 +55,30 @@ export declare class MemoryDatabase {
53
55
  findMemoryByRemoteId(remoteId: string): Memory | null;
54
56
  getSyncedMemoryCount(): number;
55
57
  getLastSyncedAt(): string | null;
58
+ addSyncHistory(operation: string, memoryId: string, status?: string, details?: string): void;
59
+ getSyncHistory(options?: {
60
+ memoryId?: string;
61
+ limit?: number;
62
+ }): Array<{
63
+ id: number;
64
+ operation: string;
65
+ memoryId: string;
66
+ timestamp: string;
67
+ status: string;
68
+ details: string | null;
69
+ }>;
70
+ addTombstone(memoryId: string): void;
71
+ getTombstones(limit?: number): Array<{
72
+ memoryId: string;
73
+ deletedAt: string;
74
+ synced: boolean;
75
+ }>;
76
+ getUnsyncedTombstones(): Array<{
77
+ memoryId: string;
78
+ deletedAt: string;
79
+ }>;
80
+ markTombstoneSynced(memoryId: string): void;
81
+ saveEmbeddingHash(memoryId: string, hash: string): void;
56
82
  saveVectorClock(memoryId: string, clockState: Record<string, number>): void;
57
83
  getVectorClock(memoryId: string): Record<string, number> | null;
58
84
  getAllVectorClocks(): Array<{
@@ -76,5 +102,44 @@ export declare class MemoryDatabase {
76
102
  private getRowId;
77
103
  private rowToMemory;
78
104
  private rowsToMemories;
105
+ /**
106
+ * PRAGMA integrity_check 실행
107
+ */
108
+ getIntegrityStatus(): boolean;
109
+ /**
110
+ * pending sync 메모리 수 조회
111
+ */
112
+ getPendingSyncCount(): number;
113
+ createProficiency(input: {
114
+ skillMemoryId: string;
115
+ skillName: string;
116
+ projectPath?: string;
117
+ }): ProficiencyRecord;
118
+ getProficiency(id: string): ProficiencyRecord | null;
119
+ getProficiencyBySkill(skillMemoryId: string): ProficiencyRecord | null;
120
+ listProficiencies(options?: {
121
+ projectPath?: string;
122
+ limit?: number;
123
+ }): ProficiencyRecord[];
124
+ updateProficiency(id: string, updates: {
125
+ level?: number;
126
+ experienceCount?: number;
127
+ successRate?: number;
128
+ actrActivation?: number;
129
+ lastPracticedAt?: string;
130
+ }): boolean;
131
+ addExperienceEvent(event: {
132
+ proficiencyId: string;
133
+ timestamp: number;
134
+ outcome: 'success' | 'partial' | 'failure';
135
+ difficulty: number;
136
+ contextTags?: string[];
137
+ sessionId?: string;
138
+ }): ExperienceEvent;
139
+ getExperienceEvents(proficiencyId: string, options?: {
140
+ limit?: number;
141
+ order?: 'asc' | 'desc';
142
+ }): ExperienceEvent[];
143
+ getExperienceEventCount(proficiencyId: string): number;
79
144
  }
80
145
  //# sourceMappingURL=database.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../../src/db/database.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../../src/db/database.ts"],"names":[],"mappings":"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"}
@@ -118,6 +118,68 @@ export class MemoryDatabase {
118
118
  catch {
119
119
  // FTS5 테이블이 이미 존재하면 무시
120
120
  }
121
+ // C-4: embedding_hash 컬럼 추가 (기존 DB 호환)
122
+ try {
123
+ this.db.exec('ALTER TABLE memories ADD COLUMN embedding_hash TEXT');
124
+ }
125
+ catch {
126
+ // 이미 존재하면 무시
127
+ }
128
+ // E-3: sync_history + tombstones 테이블
129
+ this.db.exec(`
130
+ CREATE TABLE IF NOT EXISTS sync_history (
131
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
132
+ operation TEXT NOT NULL,
133
+ memory_id TEXT NOT NULL,
134
+ timestamp TEXT NOT NULL DEFAULT (datetime('now')),
135
+ status TEXT NOT NULL DEFAULT 'success',
136
+ details TEXT
137
+ );
138
+
139
+ CREATE TABLE IF NOT EXISTS tombstones (
140
+ memory_id TEXT PRIMARY KEY,
141
+ deleted_at TEXT NOT NULL DEFAULT (datetime('now')),
142
+ synced INTEGER NOT NULL DEFAULT 0
143
+ );
144
+
145
+ CREATE INDEX IF NOT EXISTS idx_memories_embedding_hash ON memories(embedding_hash);
146
+ CREATE INDEX IF NOT EXISTS idx_sync_history_memory ON sync_history(memory_id);
147
+ CREATE INDEX IF NOT EXISTS idx_sync_history_timestamp ON sync_history(timestamp);
148
+ CREATE INDEX IF NOT EXISTS idx_tombstones_synced ON tombstones(synced);
149
+ `);
150
+ // Proficiency 테이블 (Phase 5 PoC)
151
+ this.db.exec(`
152
+ CREATE TABLE IF NOT EXISTS proficiency_records (
153
+ id TEXT PRIMARY KEY,
154
+ skill_memory_id TEXT NOT NULL,
155
+ skill_name TEXT NOT NULL,
156
+ level INTEGER NOT NULL DEFAULT 1,
157
+ experience_count INTEGER NOT NULL DEFAULT 0,
158
+ success_rate REAL NOT NULL DEFAULT 0.0,
159
+ actr_activation REAL NOT NULL DEFAULT 0.0,
160
+ last_practiced_at TEXT,
161
+ project_path TEXT,
162
+ created_at TEXT NOT NULL DEFAULT (datetime('now')),
163
+ updated_at TEXT NOT NULL DEFAULT (datetime('now')),
164
+ FOREIGN KEY (skill_memory_id) REFERENCES memories(id) ON DELETE CASCADE
165
+ );
166
+
167
+ CREATE TABLE IF NOT EXISTS experience_events (
168
+ id TEXT PRIMARY KEY,
169
+ proficiency_id TEXT NOT NULL,
170
+ timestamp REAL NOT NULL,
171
+ outcome TEXT NOT NULL CHECK(outcome IN ('success','partial','failure')),
172
+ difficulty REAL NOT NULL DEFAULT 0.5,
173
+ context_tags TEXT,
174
+ session_id TEXT,
175
+ FOREIGN KEY (proficiency_id) REFERENCES proficiency_records(id) ON DELETE CASCADE
176
+ );
177
+
178
+ CREATE INDEX IF NOT EXISTS idx_proficiency_skill ON proficiency_records(skill_memory_id);
179
+ CREATE INDEX IF NOT EXISTS idx_proficiency_project ON proficiency_records(project_path);
180
+ CREATE INDEX IF NOT EXISTS idx_experience_proficiency ON experience_events(proficiency_id);
181
+ CREATE INDEX IF NOT EXISTS idx_experience_timestamp ON experience_events(timestamp);
182
+ `);
121
183
  }
122
184
  // ============================
123
185
  // CRUD
@@ -203,7 +265,11 @@ export class MemoryDatabase {
203
265
  this.stmt('update_fts', 'UPDATE memory_fts SET content = ? WHERE rowid = ?').run(updates.content, rowId);
204
266
  }
205
267
  }
206
- return this.getMemory(id);
268
+ // getMemory()는 access_count를 증가시키므로, 직접 읽기로 부작용 방지
269
+ const updatedRow = this.stmt('get_memory', 'SELECT * FROM memories WHERE id = ?').get(id);
270
+ if (!updatedRow)
271
+ return null;
272
+ return this.rowToMemory(updatedRow);
207
273
  }
208
274
  deleteMemory(id) {
209
275
  const rowId = this.getRowId(id);
@@ -254,9 +320,10 @@ export class MemoryDatabase {
254
320
  }));
255
321
  }
256
322
  searchByVector(embedding, limit = 10, minScore = 0.5, projectPath) {
323
+ // C-4: 후보 풀 확장 (1000 → 5000) + 코사인 유사도 계산
257
324
  const rows = projectPath
258
- ? this.stmt('vector_search_project', 'SELECT * FROM memories WHERE embedding IS NOT NULL AND project_path = ?').all(projectPath)
259
- : this.stmt('vector_search_all', 'SELECT * FROM memories WHERE embedding IS NOT NULL').all();
325
+ ? this.stmt('vector_search_project', 'SELECT * FROM memories WHERE embedding IS NOT NULL AND project_path = ? LIMIT 5000').all(projectPath)
326
+ : this.stmt('vector_search_all', 'SELECT * FROM memories WHERE embedding IS NOT NULL LIMIT 5000').all();
260
327
  const scored = rows
261
328
  .map((row) => {
262
329
  const stored = bufferToFloat32Array(row.embedding);
@@ -325,6 +392,14 @@ export class MemoryDatabase {
325
392
  processedAt: row.processed_at,
326
393
  };
327
394
  }
395
+ getSessionCount(projectPath) {
396
+ if (projectPath) {
397
+ const row = this.stmt('count_sessions_project', 'SELECT COUNT(*) as cnt FROM sessions WHERE project_path = ?').get(projectPath);
398
+ return row?.cnt ?? 0;
399
+ }
400
+ const row = this.stmt('count_sessions_all', 'SELECT COUNT(*) as cnt FROM sessions').get();
401
+ return row?.cnt ?? 0;
402
+ }
328
403
  // ============================
329
404
  // Utility
330
405
  // ============================
@@ -414,6 +489,54 @@ export class MemoryDatabase {
414
489
  return row.last_synced;
415
490
  }
416
491
  // ============================
492
+ // Sync History (E-3)
493
+ // ============================
494
+ addSyncHistory(operation, memoryId, status = 'success', details) {
495
+ this.stmt('add_sync_history', `
496
+ INSERT INTO sync_history (operation, memory_id, status, details)
497
+ VALUES (?, ?, ?, ?)
498
+ `).run(operation, memoryId, status, details ?? null);
499
+ }
500
+ getSyncHistory(options) {
501
+ const limit = options?.limit ?? 100;
502
+ if (options?.memoryId) {
503
+ const rows = this.stmt('sync_history_by_memory', 'SELECT * FROM sync_history WHERE memory_id = ? ORDER BY id DESC LIMIT ?').all(options.memoryId, limit);
504
+ return rows.map(mapSyncHistoryRow);
505
+ }
506
+ const rows = this.stmt('sync_history_all', 'SELECT * FROM sync_history ORDER BY id DESC LIMIT ?').all(limit);
507
+ return rows.map(mapSyncHistoryRow);
508
+ }
509
+ // ============================
510
+ // Tombstones (E-3)
511
+ // ============================
512
+ addTombstone(memoryId) {
513
+ this.stmt('add_tombstone', `
514
+ INSERT OR REPLACE INTO tombstones (memory_id, deleted_at, synced)
515
+ VALUES (?, datetime('now'), 0)
516
+ `).run(memoryId);
517
+ }
518
+ getTombstones(limit = 1000) {
519
+ const rows = this.stmt('get_tombstones', 'SELECT * FROM tombstones ORDER BY deleted_at DESC LIMIT ?').all(limit);
520
+ return rows.map((r) => ({
521
+ memoryId: r.memory_id,
522
+ deletedAt: r.deleted_at,
523
+ synced: r.synced === 1,
524
+ }));
525
+ }
526
+ getUnsyncedTombstones() {
527
+ const rows = this.stmt('unsynced_tombstones', 'SELECT memory_id, deleted_at FROM tombstones WHERE synced = 0').all();
528
+ return rows.map((r) => ({
529
+ memoryId: r.memory_id,
530
+ deletedAt: r.deleted_at,
531
+ }));
532
+ }
533
+ markTombstoneSynced(memoryId) {
534
+ this.stmt('mark_tombstone_synced', 'UPDATE tombstones SET synced = 1 WHERE memory_id = ?').run(memoryId);
535
+ }
536
+ saveEmbeddingHash(memoryId, hash) {
537
+ this.stmt('save_emb_hash', 'UPDATE memories SET embedding_hash = ? WHERE id = ?').run(hash, memoryId);
538
+ }
539
+ // ============================
417
540
  // Vector Clocks
418
541
  // ============================
419
542
  saveVectorClock(memoryId, clockState) {
@@ -634,6 +757,156 @@ export class MemoryDatabase {
634
757
  };
635
758
  });
636
759
  }
760
+ /**
761
+ * PRAGMA integrity_check 실행
762
+ */
763
+ getIntegrityStatus() {
764
+ const result = this.db.prepare('PRAGMA integrity_check').get();
765
+ return result.integrity_check === 'ok';
766
+ }
767
+ /**
768
+ * pending sync 메모리 수 조회
769
+ */
770
+ getPendingSyncCount() {
771
+ const result = this.db
772
+ .prepare("SELECT COUNT(*) as count FROM sync_status WHERE sync_state = 'pending'")
773
+ .get();
774
+ return result.count;
775
+ }
776
+ // ============================
777
+ // Proficiency (Phase 5 PoC)
778
+ // ============================
779
+ createProficiency(input) {
780
+ const id = randomUUID();
781
+ const now = new Date().toISOString();
782
+ this.stmt('insert_proficiency', `
783
+ INSERT INTO proficiency_records (id, skill_memory_id, skill_name, project_path, created_at, updated_at)
784
+ VALUES (?, ?, ?, ?, ?, ?)
785
+ `).run(id, input.skillMemoryId, input.skillName, input.projectPath ?? null, now, now);
786
+ return {
787
+ id,
788
+ skillMemoryId: input.skillMemoryId,
789
+ skillName: input.skillName,
790
+ level: 1,
791
+ experienceCount: 0,
792
+ successRate: 0.0,
793
+ actrActivation: 0.0,
794
+ lastPracticedAt: now,
795
+ createdAt: now,
796
+ updatedAt: now,
797
+ projectPath: input.projectPath,
798
+ };
799
+ }
800
+ getProficiency(id) {
801
+ const row = this.stmt('get_proficiency', 'SELECT * FROM proficiency_records WHERE id = ?').get(id);
802
+ if (!row)
803
+ return null;
804
+ return mapProficiencyRow(row);
805
+ }
806
+ getProficiencyBySkill(skillMemoryId) {
807
+ const row = this.stmt('get_proficiency_by_skill', 'SELECT * FROM proficiency_records WHERE skill_memory_id = ?').get(skillMemoryId);
808
+ if (!row)
809
+ return null;
810
+ return mapProficiencyRow(row);
811
+ }
812
+ listProficiencies(options) {
813
+ const limit = options?.limit ?? 100;
814
+ if (options?.projectPath) {
815
+ const rows = this.stmt('list_proficiencies_project', 'SELECT * FROM proficiency_records WHERE project_path = ? ORDER BY level DESC, updated_at DESC LIMIT ?').all(options.projectPath, limit);
816
+ return rows.map(mapProficiencyRow);
817
+ }
818
+ const rows = this.stmt('list_proficiencies_all', 'SELECT * FROM proficiency_records ORDER BY level DESC, updated_at DESC LIMIT ?').all(limit);
819
+ return rows.map(mapProficiencyRow);
820
+ }
821
+ updateProficiency(id, updates) {
822
+ const fields = ["updated_at = datetime('now')"];
823
+ const values = [];
824
+ if (updates.level !== undefined) {
825
+ fields.push('level = ?');
826
+ values.push(updates.level);
827
+ }
828
+ if (updates.experienceCount !== undefined) {
829
+ fields.push('experience_count = ?');
830
+ values.push(updates.experienceCount);
831
+ }
832
+ if (updates.successRate !== undefined) {
833
+ fields.push('success_rate = ?');
834
+ values.push(updates.successRate);
835
+ }
836
+ if (updates.actrActivation !== undefined) {
837
+ fields.push('actr_activation = ?');
838
+ values.push(updates.actrActivation);
839
+ }
840
+ if (updates.lastPracticedAt !== undefined) {
841
+ fields.push('last_practiced_at = ?');
842
+ values.push(updates.lastPracticedAt);
843
+ }
844
+ values.push(id);
845
+ const result = this.db.prepare(`UPDATE proficiency_records SET ${fields.join(', ')} WHERE id = ?`).run(...values);
846
+ return result.changes > 0;
847
+ }
848
+ addExperienceEvent(event) {
849
+ const id = randomUUID();
850
+ this.stmt('insert_experience', `
851
+ INSERT INTO experience_events (id, proficiency_id, timestamp, outcome, difficulty, context_tags, session_id)
852
+ VALUES (?, ?, ?, ?, ?, ?, ?)
853
+ `).run(id, event.proficiencyId, event.timestamp, event.outcome, event.difficulty, event.contextTags ? JSON.stringify(event.contextTags) : null, event.sessionId ?? null);
854
+ return {
855
+ id,
856
+ proficiencyId: event.proficiencyId,
857
+ timestamp: event.timestamp,
858
+ outcome: event.outcome,
859
+ difficulty: event.difficulty,
860
+ contextTags: event.contextTags ?? [],
861
+ sessionId: event.sessionId,
862
+ };
863
+ }
864
+ getExperienceEvents(proficiencyId, options) {
865
+ const limit = options?.limit ?? 1000;
866
+ const order = options?.order === 'asc' ? 'ASC' : 'DESC';
867
+ const rows = this.db.prepare(`SELECT * FROM experience_events WHERE proficiency_id = ? ORDER BY timestamp ${order} LIMIT ?`).all(proficiencyId, limit);
868
+ return rows.map(mapExperienceRow);
869
+ }
870
+ getExperienceEventCount(proficiencyId) {
871
+ const row = this.stmt('count_experience', 'SELECT COUNT(*) as count FROM experience_events WHERE proficiency_id = ?').get(proficiencyId);
872
+ return row.count;
873
+ }
874
+ }
875
+ function mapSyncHistoryRow(row) {
876
+ return {
877
+ id: row.id,
878
+ operation: row.operation,
879
+ memoryId: row.memory_id,
880
+ timestamp: row.timestamp,
881
+ status: row.status,
882
+ details: row.details,
883
+ };
884
+ }
885
+ function mapProficiencyRow(row) {
886
+ return {
887
+ id: row.id,
888
+ skillMemoryId: row.skill_memory_id,
889
+ skillName: row.skill_name,
890
+ level: row.level,
891
+ experienceCount: row.experience_count,
892
+ successRate: row.success_rate,
893
+ actrActivation: row.actr_activation,
894
+ lastPracticedAt: row.last_practiced_at ?? row.created_at,
895
+ createdAt: row.created_at,
896
+ updatedAt: row.updated_at,
897
+ projectPath: row.project_path ?? undefined,
898
+ };
899
+ }
900
+ function mapExperienceRow(row) {
901
+ return {
902
+ id: row.id,
903
+ proficiencyId: row.proficiency_id,
904
+ timestamp: row.timestamp,
905
+ outcome: row.outcome,
906
+ difficulty: row.difficulty,
907
+ contextTags: row.context_tags ? JSON.parse(row.context_tags) : [],
908
+ sessionId: row.session_id ?? undefined,
909
+ };
637
910
  }
638
911
  function bufferToFloat32Array(buf) {
639
912
  const arrayBuffer = buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength);