a2a-memory 0.1.1 → 0.5.0
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/cli/commands/add.d.ts +8 -0
- package/dist/cli/commands/add.d.ts.map +1 -0
- package/dist/cli/commands/add.js +45 -0
- package/dist/cli/commands/add.js.map +1 -0
- package/dist/cli/commands/cleanup.d.ts +8 -0
- package/dist/cli/commands/cleanup.d.ts.map +1 -0
- package/dist/cli/commands/cleanup.js +82 -0
- package/dist/cli/commands/cleanup.js.map +1 -0
- package/dist/cli/commands/edit.d.ts +8 -0
- package/dist/cli/commands/edit.d.ts.map +1 -0
- package/dist/cli/commands/edit.js +66 -0
- package/dist/cli/commands/edit.js.map +1 -0
- package/dist/cli/commands/embed.d.ts +8 -0
- package/dist/cli/commands/embed.d.ts.map +1 -0
- package/dist/cli/commands/embed.js +93 -0
- package/dist/cli/commands/embed.js.map +1 -0
- package/dist/cli/commands/rm.d.ts +8 -0
- package/dist/cli/commands/rm.d.ts.map +1 -0
- package/dist/cli/commands/rm.js +60 -0
- package/dist/cli/commands/rm.js.map +1 -0
- package/dist/cli/commands/team.d.ts +7 -0
- package/dist/cli/commands/team.d.ts.map +1 -0
- package/dist/cli/commands/team.js +144 -0
- package/dist/cli/commands/team.js.map +1 -0
- package/dist/cli/index.d.ts +5 -0
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +21 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/config/manager.d.ts +7 -0
- package/dist/config/manager.d.ts.map +1 -1
- package/dist/config/manager.js +96 -5
- package/dist/config/manager.js.map +1 -1
- package/dist/db/database.d.ts +24 -1
- package/dist/db/database.d.ts.map +1 -1
- package/dist/db/database.js +190 -62
- package/dist/db/database.js.map +1 -1
- package/dist/embedding/index.d.ts +20 -0
- package/dist/embedding/index.d.ts.map +1 -0
- package/dist/embedding/index.js +28 -0
- package/dist/embedding/index.js.map +1 -0
- package/dist/embedding/local-provider.d.ts +40 -0
- package/dist/embedding/local-provider.d.ts.map +1 -0
- package/dist/embedding/local-provider.js +157 -0
- package/dist/embedding/local-provider.js.map +1 -0
- package/dist/embedding/openai-provider.d.ts +31 -0
- package/dist/embedding/openai-provider.d.ts.map +1 -0
- package/dist/embedding/openai-provider.js +92 -0
- package/dist/embedding/openai-provider.js.map +1 -0
- package/dist/extraction/extractor.d.ts +11 -1
- package/dist/extraction/extractor.d.ts.map +1 -1
- package/dist/extraction/extractor.js +63 -20
- package/dist/extraction/extractor.js.map +1 -1
- package/dist/extraction/scorer.d.ts +2 -0
- package/dist/extraction/scorer.d.ts.map +1 -1
- package/dist/extraction/scorer.js +23 -1
- package/dist/extraction/scorer.js.map +1 -1
- package/dist/extraction/similarity.d.ts +25 -0
- package/dist/extraction/similarity.d.ts.map +1 -0
- package/dist/extraction/similarity.js +85 -0
- package/dist/extraction/similarity.js.map +1 -0
- package/dist/hooks/post-tool-use.d.ts.map +1 -1
- package/dist/hooks/post-tool-use.js +28 -8
- package/dist/hooks/post-tool-use.js.map +1 -1
- package/dist/hooks/session-end.d.ts +1 -0
- package/dist/hooks/session-end.d.ts.map +1 -1
- package/dist/hooks/session-end.js +134 -11
- package/dist/hooks/session-end.js.map +1 -1
- package/dist/hooks/session-start.d.ts +2 -2
- package/dist/hooks/session-start.d.ts.map +1 -1
- package/dist/hooks/session-start.js +154 -22
- package/dist/hooks/session-start.js.map +1 -1
- package/dist/hooks/shared.d.ts +18 -0
- package/dist/hooks/shared.d.ts.map +1 -0
- package/dist/hooks/shared.js +46 -0
- package/dist/hooks/shared.js.map +1 -0
- package/dist/index.d.ts +14 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +12 -3
- package/dist/index.js.map +1 -1
- package/dist/lifecycle/cleanup.d.ts +25 -0
- package/dist/lifecycle/cleanup.d.ts.map +1 -0
- package/dist/lifecycle/cleanup.js +52 -0
- package/dist/lifecycle/cleanup.js.map +1 -0
- package/dist/lifecycle/index.d.ts +12 -0
- package/dist/lifecycle/index.d.ts.map +1 -0
- package/dist/lifecycle/index.js +10 -0
- package/dist/lifecycle/index.js.map +1 -0
- package/dist/lifecycle/quality-scorer.d.ts +19 -0
- package/dist/lifecycle/quality-scorer.d.ts.map +1 -0
- package/dist/lifecycle/quality-scorer.js +40 -0
- package/dist/lifecycle/quality-scorer.js.map +1 -0
- package/dist/llm/client.d.ts +37 -0
- package/dist/llm/client.d.ts.map +1 -0
- package/dist/llm/client.js +154 -0
- package/dist/llm/client.js.map +1 -0
- package/dist/llm/index.d.ts +6 -0
- package/dist/llm/index.d.ts.map +1 -0
- package/dist/llm/index.js +5 -0
- package/dist/llm/index.js.map +1 -0
- package/dist/search/index.d.ts +8 -0
- package/dist/search/index.d.ts.map +1 -0
- package/dist/search/index.js +7 -0
- package/dist/search/index.js.map +1 -0
- package/dist/search/ranker.d.ts +30 -0
- package/dist/search/ranker.d.ts.map +1 -0
- package/dist/search/ranker.js +91 -0
- package/dist/search/ranker.js.map +1 -0
- package/dist/sync/client.d.ts +85 -0
- package/dist/sync/client.d.ts.map +1 -1
- package/dist/sync/client.js +112 -4
- package/dist/sync/client.js.map +1 -1
- package/dist/sync/index.d.ts +5 -0
- package/dist/sync/index.d.ts.map +1 -1
- package/dist/sync/index.js +3 -0
- package/dist/sync/index.js.map +1 -1
- package/dist/sync/queue.d.ts +49 -0
- package/dist/sync/queue.d.ts.map +1 -0
- package/dist/sync/queue.js +112 -0
- package/dist/sync/queue.js.map +1 -0
- package/dist/sync/synchronizer.d.ts +19 -5
- package/dist/sync/synchronizer.d.ts.map +1 -1
- package/dist/sync/synchronizer.js +128 -70
- package/dist/sync/synchronizer.js.map +1 -1
- package/dist/sync/team-synchronizer.d.ts +43 -0
- package/dist/sync/team-synchronizer.d.ts.map +1 -0
- package/dist/sync/team-synchronizer.js +126 -0
- package/dist/sync/team-synchronizer.js.map +1 -0
- package/dist/sync/vector-clock.d.ts +23 -0
- package/dist/sync/vector-clock.d.ts.map +1 -0
- package/dist/sync/vector-clock.js +40 -0
- package/dist/sync/vector-clock.js.map +1 -0
- package/dist/types/index.d.ts +42 -2
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +22 -0
- package/dist/types/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Team Synchronizer
|
|
3
|
+
* 팀 메모리 풀과의 delta 동기화
|
|
4
|
+
*/
|
|
5
|
+
import { LocalVectorClock } from './vector-clock.js';
|
|
6
|
+
import { mapCategory, mapTier } from './queue.js';
|
|
7
|
+
const PAGE_SIZE = 100;
|
|
8
|
+
export class TeamSynchronizer {
|
|
9
|
+
db;
|
|
10
|
+
client;
|
|
11
|
+
teamPath;
|
|
12
|
+
nodeId;
|
|
13
|
+
constructor(db, client, teamPath, nodeId) {
|
|
14
|
+
this.db = db;
|
|
15
|
+
this.client = client;
|
|
16
|
+
this.teamPath = teamPath;
|
|
17
|
+
this.nodeId = nodeId;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* 전체 delta sync 사이클 (push + pull)
|
|
21
|
+
*/
|
|
22
|
+
async syncDelta() {
|
|
23
|
+
const startTime = Date.now();
|
|
24
|
+
const result = { pushed: 0, pulled: 0, errors: [], duration: 0 };
|
|
25
|
+
try {
|
|
26
|
+
// Push: 로컬 pending → 팀
|
|
27
|
+
const pending = this.db.getPendingSyncMemories();
|
|
28
|
+
for (const memory of pending) {
|
|
29
|
+
try {
|
|
30
|
+
const clock = new LocalVectorClock(this.nodeId, this.db.getVectorClock(memory.id) ?? undefined);
|
|
31
|
+
clock.increment();
|
|
32
|
+
await this.client.addTeamMemory(this.teamPath, {
|
|
33
|
+
content: memory.content,
|
|
34
|
+
category: memory.category,
|
|
35
|
+
tier: memory.tier,
|
|
36
|
+
tags: memory.tags,
|
|
37
|
+
});
|
|
38
|
+
this.db.saveVectorClock(memory.id, clock.toJSON());
|
|
39
|
+
this.db.setSyncStatus(memory.id, null, 'synced');
|
|
40
|
+
result.pushed++;
|
|
41
|
+
}
|
|
42
|
+
catch (error) {
|
|
43
|
+
result.errors.push(`Push failed for ${memory.id}: ${error instanceof Error ? error.message : String(error)}`);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
// Pull: 팀 → 로컬
|
|
47
|
+
result.pulled = await this.pullFromTeam();
|
|
48
|
+
}
|
|
49
|
+
catch (error) {
|
|
50
|
+
result.errors.push(error instanceof Error ? error.message : String(error));
|
|
51
|
+
}
|
|
52
|
+
result.duration = Date.now() - startTime;
|
|
53
|
+
return result;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* 지정 메모리를 팀에 push
|
|
57
|
+
*/
|
|
58
|
+
async pushToTeam(memoryIds) {
|
|
59
|
+
for (const id of memoryIds) {
|
|
60
|
+
const memory = this.db.getMemory(id);
|
|
61
|
+
if (!memory)
|
|
62
|
+
continue;
|
|
63
|
+
const clock = new LocalVectorClock(this.nodeId, this.db.getVectorClock(id) ?? undefined);
|
|
64
|
+
clock.increment();
|
|
65
|
+
await this.client.addTeamMemory(this.teamPath, {
|
|
66
|
+
content: memory.content,
|
|
67
|
+
category: memory.category,
|
|
68
|
+
tier: memory.tier,
|
|
69
|
+
tags: memory.tags,
|
|
70
|
+
});
|
|
71
|
+
this.db.saveVectorClock(id, clock.toJSON());
|
|
72
|
+
this.db.setSyncStatus(id, null, 'synced');
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* 팀 → 로컬 pull
|
|
77
|
+
*/
|
|
78
|
+
async pullFromTeam() {
|
|
79
|
+
let pulled = 0;
|
|
80
|
+
let offset = 0;
|
|
81
|
+
while (true) {
|
|
82
|
+
const remoteMemories = await this.client.listTeamMemories(this.teamPath, {
|
|
83
|
+
limit: PAGE_SIZE,
|
|
84
|
+
offset,
|
|
85
|
+
});
|
|
86
|
+
if (remoteMemories.length === 0)
|
|
87
|
+
break;
|
|
88
|
+
for (const remote of remoteMemories) {
|
|
89
|
+
const existing = this.db.findMemoryByRemoteId(remote.id);
|
|
90
|
+
if (!existing) {
|
|
91
|
+
const created = this.db.createMemory({
|
|
92
|
+
content: remote.content,
|
|
93
|
+
category: mapCategory(remote.category),
|
|
94
|
+
tier: mapTier(remote.tier ?? 'episodic'),
|
|
95
|
+
tags: remote.tags ?? [],
|
|
96
|
+
});
|
|
97
|
+
if (remote.embedding && remote.embedding.length > 0) {
|
|
98
|
+
this.db.saveEmbedding(created.id, remote.embedding);
|
|
99
|
+
}
|
|
100
|
+
this.db.setSyncStatus(created.id, remote.id, 'synced');
|
|
101
|
+
pulled++;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
if (remoteMemories.length < PAGE_SIZE)
|
|
105
|
+
break;
|
|
106
|
+
offset += PAGE_SIZE;
|
|
107
|
+
}
|
|
108
|
+
return pulled;
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* 팀 동기화 상태
|
|
112
|
+
*/
|
|
113
|
+
async getTeamStatus() {
|
|
114
|
+
const stats = this.db.getStats();
|
|
115
|
+
const pendingSync = this.db.getPendingSyncMemories().length;
|
|
116
|
+
const lastSyncedAt = this.db.getLastSyncedAt();
|
|
117
|
+
return {
|
|
118
|
+
teamPath: this.teamPath,
|
|
119
|
+
nodeId: this.nodeId,
|
|
120
|
+
localMemoryCount: stats.totalMemories,
|
|
121
|
+
pendingSync,
|
|
122
|
+
lastSyncedAt: lastSyncedAt ?? undefined,
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
//# sourceMappingURL=team-synchronizer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"team-synchronizer.js","sourceRoot":"","sources":["../../src/sync/team-synchronizer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Local Vector Clock
|
|
3
|
+
* CRDT 기반 동기화를 위한 로컬 벡터 클럭 관리
|
|
4
|
+
*/
|
|
5
|
+
import type { VectorClockState } from '../types/index.js';
|
|
6
|
+
export declare class LocalVectorClock {
|
|
7
|
+
private nodeId;
|
|
8
|
+
private state;
|
|
9
|
+
constructor(nodeId: string, state?: VectorClockState);
|
|
10
|
+
/**
|
|
11
|
+
* 현재 노드의 카운터를 1 증가
|
|
12
|
+
*/
|
|
13
|
+
increment(): VectorClockState;
|
|
14
|
+
/**
|
|
15
|
+
* 원격 벡터 클럭과 병합 (element-wise max)
|
|
16
|
+
*/
|
|
17
|
+
merge(remote: VectorClockState): void;
|
|
18
|
+
getNodeId(): string;
|
|
19
|
+
get(nodeId: string): number;
|
|
20
|
+
toJSON(): VectorClockState;
|
|
21
|
+
static fromJSON(nodeId: string, data: VectorClockState): LocalVectorClock;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=vector-clock.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vector-clock.d.ts","sourceRoot":"","sources":["../../src/sync/vector-clock.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAE1D,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,KAAK,CAAmB;gBAEpB,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,gBAAgB;IAKpD;;OAEG;IACH,SAAS,IAAI,gBAAgB;IAK7B;;OAEG;IACH,KAAK,CAAC,MAAM,EAAE,gBAAgB,GAAG,IAAI;IAMrC,SAAS,IAAI,MAAM;IAInB,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAI3B,MAAM,IAAI,gBAAgB;IAI1B,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,gBAAgB,GAAG,gBAAgB;CAG1E"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Local Vector Clock
|
|
3
|
+
* CRDT 기반 동기화를 위한 로컬 벡터 클럭 관리
|
|
4
|
+
*/
|
|
5
|
+
export class LocalVectorClock {
|
|
6
|
+
nodeId;
|
|
7
|
+
state;
|
|
8
|
+
constructor(nodeId, state) {
|
|
9
|
+
this.nodeId = nodeId;
|
|
10
|
+
this.state = state ? { ...state } : {};
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* 현재 노드의 카운터를 1 증가
|
|
14
|
+
*/
|
|
15
|
+
increment() {
|
|
16
|
+
this.state[this.nodeId] = (this.state[this.nodeId] ?? 0) + 1;
|
|
17
|
+
return this.toJSON();
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* 원격 벡터 클럭과 병합 (element-wise max)
|
|
21
|
+
*/
|
|
22
|
+
merge(remote) {
|
|
23
|
+
for (const [node, count] of Object.entries(remote)) {
|
|
24
|
+
this.state[node] = Math.max(this.state[node] ?? 0, count);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
getNodeId() {
|
|
28
|
+
return this.nodeId;
|
|
29
|
+
}
|
|
30
|
+
get(nodeId) {
|
|
31
|
+
return this.state[nodeId] ?? 0;
|
|
32
|
+
}
|
|
33
|
+
toJSON() {
|
|
34
|
+
return { ...this.state };
|
|
35
|
+
}
|
|
36
|
+
static fromJSON(nodeId, data) {
|
|
37
|
+
return new LocalVectorClock(nodeId, data);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=vector-clock.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vector-clock.js","sourceRoot":"","sources":["../../src/sync/vector-clock.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,MAAM,OAAO,gBAAgB;IACnB,MAAM,CAAS;IACf,KAAK,CAAmB;IAEhC,YAAY,MAAc,EAAE,KAAwB;QAClD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACzC,CAAC;IAED;;OAEG;IACH,SAAS;QACP,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QAC7D,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC;IACvB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAwB;QAC5B,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YACnD,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,GAAG,CAAC,MAAc;QAChB,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;IAED,MAAM;QACJ,OAAO,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;IAC3B,CAAC;IAED,MAAM,CAAC,QAAQ,CAAC,MAAc,EAAE,IAAsB;QACpD,OAAO,IAAI,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC5C,CAAC;CACF"}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
* 이 파일은 모든 모듈이 공유하는 타입 정의입니다.
|
|
5
5
|
* 변경 시 모든 의존 모듈에 영향을 미치므로 신중하게 수정하세요.
|
|
6
6
|
*/
|
|
7
|
-
export type MemoryCategory = 'error_solution' | 'code_pattern' | 'decision' | 'context' | '
|
|
8
|
-
export type MemoryTier = '
|
|
7
|
+
export type MemoryCategory = 'error_solution' | 'code_pattern' | 'decision' | 'context' | 'project_knowledge' | 'convention' | 'learning';
|
|
8
|
+
export type MemoryTier = 'working' | 'episodic' | 'semantic';
|
|
9
9
|
export interface Memory {
|
|
10
10
|
id: string;
|
|
11
11
|
content: string;
|
|
@@ -79,12 +79,46 @@ export interface ExtractionResult {
|
|
|
79
79
|
processingTimeMs: number;
|
|
80
80
|
};
|
|
81
81
|
}
|
|
82
|
+
export interface TeamConfig {
|
|
83
|
+
teamId: string;
|
|
84
|
+
teamPath: string;
|
|
85
|
+
nodeId: string;
|
|
86
|
+
}
|
|
87
|
+
export type VectorClockState = Record<string, number>;
|
|
88
|
+
export interface LLMConfig {
|
|
89
|
+
enabled: boolean;
|
|
90
|
+
provider: 'openai' | 'anthropic' | 'none';
|
|
91
|
+
apiKey?: string;
|
|
92
|
+
model?: string;
|
|
93
|
+
maxTokens?: number;
|
|
94
|
+
}
|
|
95
|
+
export interface EmbeddingConfig {
|
|
96
|
+
enabled: boolean;
|
|
97
|
+
provider: 'local' | 'openai';
|
|
98
|
+
dimensions: number;
|
|
99
|
+
}
|
|
100
|
+
export interface LifecycleConfig {
|
|
101
|
+
ttlDays: number;
|
|
102
|
+
maxMemories: number;
|
|
103
|
+
cleanupOnSessionEnd: boolean;
|
|
104
|
+
qualityThreshold: number;
|
|
105
|
+
}
|
|
106
|
+
export interface MemoryQuality {
|
|
107
|
+
relevance: number;
|
|
108
|
+
freshness: number;
|
|
109
|
+
usage: number;
|
|
110
|
+
overall: number;
|
|
111
|
+
}
|
|
82
112
|
export interface A2AConfig {
|
|
83
113
|
server: {
|
|
84
114
|
url: string;
|
|
85
115
|
apiKey?: string;
|
|
86
116
|
};
|
|
87
117
|
mode: 'local' | 'team';
|
|
118
|
+
team?: TeamConfig;
|
|
119
|
+
llm?: LLMConfig;
|
|
120
|
+
embedding?: EmbeddingConfig;
|
|
121
|
+
lifecycle?: LifecycleConfig;
|
|
88
122
|
autoCapture: {
|
|
89
123
|
enabled: boolean;
|
|
90
124
|
triggers: string[];
|
|
@@ -104,6 +138,12 @@ export interface A2AConfig {
|
|
|
104
138
|
path: string;
|
|
105
139
|
maxSizeMB: number;
|
|
106
140
|
};
|
|
141
|
+
autoSync: {
|
|
142
|
+
enabled: boolean;
|
|
143
|
+
pushOnSessionEnd: boolean;
|
|
144
|
+
pullOnSessionStart: boolean;
|
|
145
|
+
timeoutMs: number;
|
|
146
|
+
};
|
|
107
147
|
}
|
|
108
148
|
export declare const DEFAULT_CONFIG: A2AConfig;
|
|
109
149
|
export interface HookContext {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,MAAM,MAAM,cAAc,GACtB,gBAAgB,GAChB,cAAc,GACd,UAAU,GACV,SAAS,GACT,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
|
package/dist/types/index.js
CHANGED
|
@@ -9,6 +9,22 @@ export const DEFAULT_CONFIG = {
|
|
|
9
9
|
url: 'https://a2a-api-production-8d17.up.railway.app',
|
|
10
10
|
},
|
|
11
11
|
mode: 'local',
|
|
12
|
+
llm: {
|
|
13
|
+
enabled: false,
|
|
14
|
+
provider: 'none',
|
|
15
|
+
maxTokens: 500,
|
|
16
|
+
},
|
|
17
|
+
embedding: {
|
|
18
|
+
enabled: false,
|
|
19
|
+
provider: 'local',
|
|
20
|
+
dimensions: 64,
|
|
21
|
+
},
|
|
22
|
+
lifecycle: {
|
|
23
|
+
ttlDays: 90,
|
|
24
|
+
maxMemories: 1000,
|
|
25
|
+
cleanupOnSessionEnd: false,
|
|
26
|
+
qualityThreshold: 0.3,
|
|
27
|
+
},
|
|
12
28
|
autoCapture: {
|
|
13
29
|
enabled: false, // Opt-in (GDPR)
|
|
14
30
|
triggers: ['Write', 'Edit', 'Bash'],
|
|
@@ -31,6 +47,12 @@ export const DEFAULT_CONFIG = {
|
|
|
31
47
|
path: '~/.a2a/memory.db',
|
|
32
48
|
maxSizeMB: 100,
|
|
33
49
|
},
|
|
50
|
+
autoSync: {
|
|
51
|
+
enabled: false,
|
|
52
|
+
pushOnSessionEnd: true,
|
|
53
|
+
pullOnSessionStart: true,
|
|
54
|
+
timeoutMs: 5000,
|
|
55
|
+
},
|
|
34
56
|
};
|
|
35
57
|
// ============================================================
|
|
36
58
|
// Sensitive Info Patterns
|
package/dist/types/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAmMH,MAAM,CAAC,MAAM,cAAc,GAAc;IACvC,MAAM,EAAE;QACN,GAAG,EAAE,gDAAgD;KACtD;IACD,IAAI,EAAE,OAAO;IACb,GAAG,EAAE;QACH,OAAO,EAAE,KAAK;QACd,QAAQ,EAAE,MAAM;QAChB,SAAS,EAAE,GAAG;KACf;IACD,SAAS,EAAE;QACT,OAAO,EAAE,KAAK;QACd,QAAQ,EAAE,OAAO;QACjB,UAAU,EAAE,EAAE;KACf;IACD,SAAS,EAAE;QACT,OAAO,EAAE,EAAE;QACX,WAAW,EAAE,IAAI;QACjB,mBAAmB,EAAE,KAAK;QAC1B,gBAAgB,EAAE,GAAG;KACtB;IACD,WAAW,EAAE;QACX,OAAO,EAAE,KAAK,EAAG,gBAAgB;QACjC,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC;QACnC,eAAe,EAAE;YACf,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,kBAAkB;YAC5C,cAAc,EAAE,MAAM,EAAE,WAAW;SACpC;QACD,qBAAqB,EAAE,GAAG;KAC3B;IACD,UAAU,EAAE;QACV,OAAO,EAAE,IAAI;QACb,WAAW,EAAE,CAAC;QACd,SAAS,EAAE,IAAI;KAChB;IACD,cAAc,EAAE;QACd,OAAO,EAAE,IAAI;QACb,UAAU,EAAE,CAAC;KACd;IACD,EAAE,EAAE;QACF,IAAI,EAAE,kBAAkB;QACxB,SAAS,EAAE,GAAG;KACf;IACD,QAAQ,EAAE;QACR,OAAO,EAAE,KAAK;QACd,gBAAgB,EAAE,IAAI;QACtB,kBAAkB,EAAE,IAAI;QACxB,SAAS,EAAE,IAAI;KAChB;CACF,CAAC;AA8CF,+DAA+D;AAC/D,0BAA0B;AAC1B,+DAA+D;AAE/D,MAAM,CAAC,MAAM,kBAAkB,GAAa;IAC1C,mDAAmD;IACnD,4DAA4D;IAC5D,sBAAsB,EAAqB,cAAc;IACzD,2BAA2B,EAAgB,cAAc;IACzD,uBAAuB,EAAoB,gBAAgB;IAC3D,oCAAoC,EAAO,gBAAgB;IAC3D,iDAAiD,EAAG,SAAS;IAC7D,6CAA6C,EAAS,eAAe;CACtE,CAAC"}
|