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.
- package/dist/adapters/anthropic.d.ts.map +1 -1
- package/dist/adapters/anthropic.js +1 -0
- package/dist/adapters/anthropic.js.map +1 -1
- package/dist/claude/sync.js +6 -6
- package/dist/claude/sync.js.map +1 -1
- package/dist/cli/commands/config.d.ts.map +1 -1
- package/dist/cli/commands/config.js +16 -1
- package/dist/cli/commands/config.js.map +1 -1
- package/dist/cli/commands/health.d.ts.map +1 -1
- package/dist/cli/commands/health.js +3 -6
- package/dist/cli/commands/health.js.map +1 -1
- package/dist/cli/commands/proficiency.d.ts +8 -0
- package/dist/cli/commands/proficiency.d.ts.map +1 -0
- package/dist/cli/commands/proficiency.js +142 -0
- package/dist/cli/commands/proficiency.js.map +1 -0
- package/dist/cli/commands/skill.d.ts +8 -0
- package/dist/cli/commands/skill.d.ts.map +1 -0
- package/dist/cli/commands/skill.js +136 -0
- package/dist/cli/commands/skill.js.map +1 -0
- package/dist/cli/commands/sync.d.ts.map +1 -1
- package/dist/cli/commands/sync.js +15 -10
- package/dist/cli/commands/sync.js.map +1 -1
- package/dist/cli/commands/team.d.ts.map +1 -1
- package/dist/cli/commands/team.js +0 -2
- package/dist/cli/commands/team.js.map +1 -1
- package/dist/cli/index.js +4 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/config/manager.d.ts +682 -0
- package/dist/config/manager.d.ts.map +1 -1
- package/dist/config/manager.js +77 -2
- package/dist/config/manager.js.map +1 -1
- package/dist/db/database.d.ts +65 -0
- package/dist/db/database.d.ts.map +1 -1
- package/dist/db/database.js +276 -3
- package/dist/db/database.js.map +1 -1
- package/dist/extraction/extractor.d.ts +4 -0
- package/dist/extraction/extractor.d.ts.map +1 -1
- package/dist/extraction/extractor.js +261 -38
- package/dist/extraction/extractor.js.map +1 -1
- package/dist/extraction/scorer.js +5 -3
- package/dist/extraction/scorer.js.map +1 -1
- package/dist/hooks/post-tool-use.d.ts.map +1 -1
- package/dist/hooks/post-tool-use.js +78 -15
- package/dist/hooks/post-tool-use.js.map +1 -1
- package/dist/hooks/session-end.d.ts.map +1 -1
- package/dist/hooks/session-end.js +57 -4
- package/dist/hooks/session-end.js.map +1 -1
- package/dist/hooks/session-start.d.ts.map +1 -1
- package/dist/hooks/session-start.js +104 -36
- package/dist/hooks/session-start.js.map +1 -1
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/lifecycle/cleanup.d.ts.map +1 -1
- package/dist/lifecycle/cleanup.js +2 -1
- package/dist/lifecycle/cleanup.js.map +1 -1
- package/dist/llm/client.d.ts +22 -0
- package/dist/llm/client.d.ts.map +1 -1
- package/dist/llm/client.js +74 -2
- package/dist/llm/client.js.map +1 -1
- package/dist/proficiency/actr-engine.d.ts +55 -0
- package/dist/proficiency/actr-engine.d.ts.map +1 -0
- package/dist/proficiency/actr-engine.js +106 -0
- package/dist/proficiency/actr-engine.js.map +1 -0
- package/dist/proficiency/index.d.ts +9 -0
- package/dist/proficiency/index.d.ts.map +1 -0
- package/dist/proficiency/index.js +8 -0
- package/dist/proficiency/index.js.map +1 -0
- package/dist/proficiency/tracker.d.ts +50 -0
- package/dist/proficiency/tracker.d.ts.map +1 -0
- package/dist/proficiency/tracker.js +170 -0
- package/dist/proficiency/tracker.js.map +1 -0
- package/dist/proficiency/types.d.ts +60 -0
- package/dist/proficiency/types.d.ts.map +1 -0
- package/dist/proficiency/types.js +8 -0
- package/dist/proficiency/types.js.map +1 -0
- package/dist/providers/adapters.d.ts +54 -0
- package/dist/providers/adapters.d.ts.map +1 -0
- package/dist/providers/adapters.js +140 -0
- package/dist/providers/adapters.js.map +1 -0
- package/dist/providers/detector.d.ts +17 -0
- package/dist/providers/detector.d.ts.map +1 -0
- package/dist/providers/detector.js +57 -0
- package/dist/providers/detector.js.map +1 -0
- package/dist/search/ranker.d.ts +26 -2
- package/dist/search/ranker.d.ts.map +1 -1
- package/dist/search/ranker.js +121 -46
- package/dist/search/ranker.js.map +1 -1
- package/dist/session/parser.d.ts.map +1 -1
- package/dist/session/parser.js +1 -0
- package/dist/session/parser.js.map +1 -1
- package/dist/skill/evaluator.d.ts +57 -0
- package/dist/skill/evaluator.d.ts.map +1 -0
- package/dist/skill/evaluator.js +373 -0
- package/dist/skill/evaluator.js.map +1 -0
- package/dist/skill/index.d.ts +8 -0
- package/dist/skill/index.d.ts.map +1 -0
- package/dist/skill/index.js +7 -0
- package/dist/skill/index.js.map +1 -0
- package/dist/skill/types.d.ts +34 -0
- package/dist/skill/types.d.ts.map +1 -0
- package/dist/skill/types.js +7 -0
- package/dist/skill/types.js.map +1 -0
- package/dist/sync/client.js +1 -1
- package/dist/sync/queue.d.ts +1 -0
- package/dist/sync/queue.d.ts.map +1 -1
- package/dist/sync/queue.js +33 -5
- package/dist/sync/queue.js.map +1 -1
- package/dist/sync/synchronizer.js +1 -1
- package/dist/sync/synchronizer.js.map +1 -1
- package/dist/sync/team-synchronizer.d.ts +6 -2
- package/dist/sync/team-synchronizer.d.ts.map +1 -1
- package/dist/sync/team-synchronizer.js +84 -6
- package/dist/sync/team-synchronizer.js.map +1 -1
- package/dist/sync/vector-clock.d.ts +7 -0
- package/dist/sync/vector-clock.d.ts.map +1 -1
- package/dist/sync/vector-clock.js +30 -0
- package/dist/sync/vector-clock.js.map +1 -1
- package/dist/types/index.d.ts +27 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +24 -1
- package/dist/types/index.js.map +1 -1
- package/dist/utils/keychain.d.ts.map +1 -1
- package/dist/utils/keychain.js +4 -0
- package/dist/utils/keychain.js.map +1 -1
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js +12 -2
- package/dist/utils/logger.js.map +1 -1
- package/package.json +1 -1
package/dist/config/manager.js
CHANGED
|
@@ -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
|
-
|
|
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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"}
|
package/dist/db/database.d.ts
CHANGED
|
@@ -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":"AAAA;;;;;GAKG;AAOH,OAAO,KAAK,EACV,MAAM,EACN,iBAAiB,EACjB,mBAAmB,EACnB,kBAAkB,EAClB,cAAc,EACd,UAAU,EACV,iBAAiB,EAClB,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../../src/db/database.ts"],"names":[],"mappings":"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"}
|
package/dist/db/database.js
CHANGED
|
@@ -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
|
-
|
|
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);
|