@xfabric/memory 0.1.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/chunking/index.d.ts +3 -0
- package/dist/chunking/index.d.ts.map +1 -0
- package/dist/chunking/index.js +3 -0
- package/dist/chunking/index.js.map +1 -0
- package/dist/chunking/markdown.d.ts +13 -0
- package/dist/chunking/markdown.d.ts.map +1 -0
- package/dist/chunking/markdown.js +106 -0
- package/dist/chunking/markdown.js.map +1 -0
- package/dist/chunking/session.d.ts +24 -0
- package/dist/chunking/session.d.ts.map +1 -0
- package/dist/chunking/session.js +173 -0
- package/dist/chunking/session.js.map +1 -0
- package/dist/index.d.ts +18 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +24 -0
- package/dist/index.js.map +1 -0
- package/dist/memory-manager.d.ts +189 -0
- package/dist/memory-manager.d.ts.map +1 -0
- package/dist/memory-manager.js +1055 -0
- package/dist/memory-manager.js.map +1 -0
- package/dist/providers/gemini.d.ts +6 -0
- package/dist/providers/gemini.d.ts.map +1 -0
- package/dist/providers/gemini.js +73 -0
- package/dist/providers/gemini.js.map +1 -0
- package/dist/providers/index.d.ts +20 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js +102 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/providers/local.d.ts +14 -0
- package/dist/providers/local.d.ts.map +1 -0
- package/dist/providers/local.js +73 -0
- package/dist/providers/local.js.map +1 -0
- package/dist/providers/openai.d.ts +6 -0
- package/dist/providers/openai.d.ts.map +1 -0
- package/dist/providers/openai.js +48 -0
- package/dist/providers/openai.js.map +1 -0
- package/dist/providers/types.d.ts +62 -0
- package/dist/providers/types.d.ts.map +1 -0
- package/dist/providers/types.js +2 -0
- package/dist/providers/types.js.map +1 -0
- package/dist/search/fts.d.ts +11 -0
- package/dist/search/fts.d.ts.map +1 -0
- package/dist/search/fts.js +50 -0
- package/dist/search/fts.js.map +1 -0
- package/dist/search/hybrid.d.ts +16 -0
- package/dist/search/hybrid.d.ts.map +1 -0
- package/dist/search/hybrid.js +83 -0
- package/dist/search/hybrid.js.map +1 -0
- package/dist/search/index.d.ts +4 -0
- package/dist/search/index.d.ts.map +1 -0
- package/dist/search/index.js +4 -0
- package/dist/search/index.js.map +1 -0
- package/dist/search/vector.d.ts +25 -0
- package/dist/search/vector.d.ts.map +1 -0
- package/dist/search/vector.js +152 -0
- package/dist/search/vector.js.map +1 -0
- package/dist/storage/index.d.ts +4 -0
- package/dist/storage/index.d.ts.map +1 -0
- package/dist/storage/index.js +4 -0
- package/dist/storage/index.js.map +1 -0
- package/dist/storage/schema.d.ts +24 -0
- package/dist/storage/schema.d.ts.map +1 -0
- package/dist/storage/schema.js +175 -0
- package/dist/storage/schema.js.map +1 -0
- package/dist/storage/sqlite-vec.d.ts +22 -0
- package/dist/storage/sqlite-vec.d.ts.map +1 -0
- package/dist/storage/sqlite-vec.js +85 -0
- package/dist/storage/sqlite-vec.js.map +1 -0
- package/dist/storage/sqlite.d.ts +206 -0
- package/dist/storage/sqlite.d.ts.map +1 -0
- package/dist/storage/sqlite.js +352 -0
- package/dist/storage/sqlite.js.map +1 -0
- package/dist/sync/index.d.ts +4 -0
- package/dist/sync/index.d.ts.map +1 -0
- package/dist/sync/index.js +4 -0
- package/dist/sync/index.js.map +1 -0
- package/dist/sync/minimatch.d.ts +6 -0
- package/dist/sync/minimatch.d.ts.map +1 -0
- package/dist/sync/minimatch.js +60 -0
- package/dist/sync/minimatch.js.map +1 -0
- package/dist/sync/session-monitor.d.ts +50 -0
- package/dist/sync/session-monitor.d.ts.map +1 -0
- package/dist/sync/session-monitor.js +126 -0
- package/dist/sync/session-monitor.js.map +1 -0
- package/dist/sync/watcher.d.ts +44 -0
- package/dist/sync/watcher.d.ts.map +1 -0
- package/dist/sync/watcher.js +110 -0
- package/dist/sync/watcher.js.map +1 -0
- package/dist/tools/index.d.ts +3 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +3 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/memory-get.d.ts +32 -0
- package/dist/tools/memory-get.d.ts.map +1 -0
- package/dist/tools/memory-get.js +53 -0
- package/dist/tools/memory-get.js.map +1 -0
- package/dist/tools/memory-search.d.ts +32 -0
- package/dist/tools/memory-search.d.ts.map +1 -0
- package/dist/tools/memory-search.js +56 -0
- package/dist/tools/memory-search.js.map +1 -0
- package/dist/types.d.ts +350 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +15 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/concurrency.d.ts +25 -0
- package/dist/utils/concurrency.d.ts.map +1 -0
- package/dist/utils/concurrency.js +59 -0
- package/dist/utils/concurrency.js.map +1 -0
- package/dist/utils/hash.d.ts +9 -0
- package/dist/utils/hash.d.ts.map +1 -0
- package/dist/utils/hash.js +16 -0
- package/dist/utils/hash.js.map +1 -0
- package/dist/utils/index.d.ts +4 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +4 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/retry.d.ts +22 -0
- package/dist/utils/retry.d.ts.map +1 -0
- package/dist/utils/retry.js +48 -0
- package/dist/utils/retry.js.map +1 -0
- package/package.json +67 -0
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import type { SessionEvent } from "../types.js";
|
|
2
|
+
export type SessionMonitorOptions = {
|
|
3
|
+
/** Path to the JSONL session file */
|
|
4
|
+
sessionPath: string;
|
|
5
|
+
/** Callback for new session events */
|
|
6
|
+
onEvent: (event: SessionEvent) => void;
|
|
7
|
+
/** Poll interval in milliseconds */
|
|
8
|
+
pollIntervalMs?: number;
|
|
9
|
+
};
|
|
10
|
+
/**
|
|
11
|
+
* Monitor a JSONL session file for new messages
|
|
12
|
+
*/
|
|
13
|
+
export declare class SessionMonitor {
|
|
14
|
+
private readonly sessionId;
|
|
15
|
+
private readonly options;
|
|
16
|
+
private lastOffset;
|
|
17
|
+
private lastMtime;
|
|
18
|
+
private pollTimer;
|
|
19
|
+
private monitoring;
|
|
20
|
+
constructor(sessionId: string, options: SessionMonitorOptions);
|
|
21
|
+
/**
|
|
22
|
+
* Check if the monitor is currently active
|
|
23
|
+
*/
|
|
24
|
+
get isMonitoring(): boolean;
|
|
25
|
+
/**
|
|
26
|
+
* Start monitoring the session file
|
|
27
|
+
*/
|
|
28
|
+
start(): void;
|
|
29
|
+
/**
|
|
30
|
+
* Stop monitoring the session file
|
|
31
|
+
*/
|
|
32
|
+
stop(): void;
|
|
33
|
+
/**
|
|
34
|
+
* Check for new content in the session file
|
|
35
|
+
*/
|
|
36
|
+
private checkForUpdates;
|
|
37
|
+
/**
|
|
38
|
+
* Process a parsed JSONL message
|
|
39
|
+
*/
|
|
40
|
+
private processMessage;
|
|
41
|
+
/**
|
|
42
|
+
* Extract text content from a message
|
|
43
|
+
*/
|
|
44
|
+
private extractContent;
|
|
45
|
+
/**
|
|
46
|
+
* Reset the read position (useful for reprocessing)
|
|
47
|
+
*/
|
|
48
|
+
reset(): void;
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=session-monitor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-monitor.d.ts","sourceRoot":"","sources":["../../src/sync/session-monitor.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,MAAM,MAAM,qBAAqB,GAAG;IAClC,qCAAqC;IACrC,WAAW,EAAE,MAAM,CAAC;IACpB,sCAAsC;IACtC,OAAO,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;IACvC,oCAAoC;IACpC,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AAWF;;GAEG;AACH,qBAAa,cAAc;IAOvB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,OAAO;IAP1B,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,SAAS,CAA+B;IAChD,OAAO,CAAC,UAAU,CAAS;gBAGR,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,qBAAqB;IAGjD;;OAEG;IACH,IAAI,YAAY,IAAI,OAAO,CAE1B;IAED;;OAEG;IACH,KAAK,IAAI,IAAI;IAeb;;OAEG;IACH,IAAI,IAAI,IAAI;IAQZ;;OAEG;IACH,OAAO,CAAC,eAAe;IA0CvB;;OAEG;IACH,OAAO,CAAC,cAAc;IAqBtB;;OAEG;IACH,OAAO,CAAC,cAAc;IAiBtB;;OAEG;IACH,KAAK,IAAI,IAAI;CAId"}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
import { readFileSync, statSync, existsSync } from "node:fs";
|
|
2
|
+
/**
|
|
3
|
+
* Monitor a JSONL session file for new messages
|
|
4
|
+
*/
|
|
5
|
+
export class SessionMonitor {
|
|
6
|
+
sessionId;
|
|
7
|
+
options;
|
|
8
|
+
lastOffset = 0;
|
|
9
|
+
lastMtime = 0;
|
|
10
|
+
pollTimer = null;
|
|
11
|
+
monitoring = false;
|
|
12
|
+
constructor(sessionId, options) {
|
|
13
|
+
this.sessionId = sessionId;
|
|
14
|
+
this.options = options;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Check if the monitor is currently active
|
|
18
|
+
*/
|
|
19
|
+
get isMonitoring() {
|
|
20
|
+
return this.monitoring;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Start monitoring the session file
|
|
24
|
+
*/
|
|
25
|
+
start() {
|
|
26
|
+
if (this.monitoring) {
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
this.monitoring = true;
|
|
30
|
+
this.pollTimer = setInterval(() => this.checkForUpdates(), this.options.pollIntervalMs ?? 1000);
|
|
31
|
+
// Initial check
|
|
32
|
+
this.checkForUpdates();
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Stop monitoring the session file
|
|
36
|
+
*/
|
|
37
|
+
stop() {
|
|
38
|
+
if (this.pollTimer) {
|
|
39
|
+
clearInterval(this.pollTimer);
|
|
40
|
+
this.pollTimer = null;
|
|
41
|
+
}
|
|
42
|
+
this.monitoring = false;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Check for new content in the session file
|
|
46
|
+
*/
|
|
47
|
+
checkForUpdates() {
|
|
48
|
+
const { sessionPath } = this.options;
|
|
49
|
+
if (!existsSync(sessionPath)) {
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
try {
|
|
53
|
+
const stat = statSync(sessionPath);
|
|
54
|
+
// Skip if file hasn't changed
|
|
55
|
+
if (stat.mtimeMs === this.lastMtime && stat.size <= this.lastOffset) {
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
this.lastMtime = stat.mtimeMs;
|
|
59
|
+
// Read only the new content
|
|
60
|
+
const content = readFileSync(sessionPath, "utf-8");
|
|
61
|
+
const newContent = content.slice(this.lastOffset);
|
|
62
|
+
this.lastOffset = content.length;
|
|
63
|
+
if (!newContent.trim()) {
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
// Parse JSONL lines
|
|
67
|
+
const lines = newContent.split("\n").filter((line) => line.trim());
|
|
68
|
+
for (const line of lines) {
|
|
69
|
+
try {
|
|
70
|
+
const msg = JSON.parse(line);
|
|
71
|
+
this.processMessage(msg);
|
|
72
|
+
}
|
|
73
|
+
catch {
|
|
74
|
+
// Skip invalid JSON lines
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
catch (err) {
|
|
79
|
+
// File might be temporarily unavailable
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Process a parsed JSONL message
|
|
84
|
+
*/
|
|
85
|
+
processMessage(msg) {
|
|
86
|
+
if (msg.type !== "message" || !msg.role || !msg.message) {
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
const content = this.extractContent(msg.message);
|
|
90
|
+
if (!content) {
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
const event = {
|
|
94
|
+
type: "message",
|
|
95
|
+
sessionId: this.sessionId,
|
|
96
|
+
role: msg.role,
|
|
97
|
+
content,
|
|
98
|
+
timestamp: msg.timestamp ? new Date(msg.timestamp).getTime() : Date.now(),
|
|
99
|
+
};
|
|
100
|
+
this.options.onEvent(event);
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Extract text content from a message
|
|
104
|
+
*/
|
|
105
|
+
extractContent(message) {
|
|
106
|
+
if (!message?.content) {
|
|
107
|
+
return null;
|
|
108
|
+
}
|
|
109
|
+
if (typeof message.content === "string") {
|
|
110
|
+
return message.content;
|
|
111
|
+
}
|
|
112
|
+
// Handle array of content blocks
|
|
113
|
+
const textParts = message.content
|
|
114
|
+
.filter((block) => block.type === "text" && block.text)
|
|
115
|
+
.map((block) => block.text);
|
|
116
|
+
return textParts.length > 0 ? textParts.join("\n") : null;
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Reset the read position (useful for reprocessing)
|
|
120
|
+
*/
|
|
121
|
+
reset() {
|
|
122
|
+
this.lastOffset = 0;
|
|
123
|
+
this.lastMtime = 0;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
//# sourceMappingURL=session-monitor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-monitor.js","sourceRoot":"","sources":["../../src/sync/session-monitor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAqB7D;;GAEG;AACH,MAAM,OAAO,cAAc;IAON;IACA;IAPX,UAAU,GAAG,CAAC,CAAC;IACf,SAAS,GAAG,CAAC,CAAC;IACd,SAAS,GAA0B,IAAI,CAAC;IACxC,UAAU,GAAG,KAAK,CAAC;IAE3B,YACmB,SAAiB,EACjB,OAA8B;QAD9B,cAAS,GAAT,SAAS,CAAQ;QACjB,YAAO,GAAP,OAAO,CAAuB;IAC9C,CAAC;IAEJ;;OAEG;IACH,IAAI,YAAY;QACd,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAED;;OAEG;IACH,KAAK;QACH,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,OAAO;QACT,CAAC;QAED,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACvB,IAAI,CAAC,SAAS,GAAG,WAAW,CAC1B,GAAG,EAAE,CAAC,IAAI,CAAC,eAAe,EAAE,EAC5B,IAAI,CAAC,OAAO,CAAC,cAAc,IAAI,IAAI,CACpC,CAAC;QAEF,gBAAgB;QAChB,IAAI,CAAC,eAAe,EAAE,CAAC;IACzB,CAAC;IAED;;OAEG;IACH,IAAI;QACF,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC9B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACxB,CAAC;QACD,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;IAC1B,CAAC;IAED;;OAEG;IACK,eAAe;QACrB,MAAM,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC;QAErC,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YAC7B,OAAO;QACT,CAAC;QAED,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAC;YAEnC,8BAA8B;YAC9B,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;gBACpE,OAAO;YACT,CAAC;YAED,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC;YAE9B,4BAA4B;YAC5B,MAAM,OAAO,GAAG,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;YACnD,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAClD,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC;YAEjC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC;gBACvB,OAAO;YACT,CAAC;YAED,oBAAoB;YACpB,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;YAEnE,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,IAAI,CAAC;oBACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAiB,CAAC;oBAC7C,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;gBAC3B,CAAC;gBAAC,MAAM,CAAC;oBACP,0BAA0B;gBAC5B,CAAC;YACH,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,wCAAwC;QAC1C,CAAC;IACH,CAAC;IAED;;OAEG;IACK,cAAc,CAAC,GAAiB;QACtC,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;YACxD,OAAO;QACT,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACjD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO;QACT,CAAC;QAED,MAAM,KAAK,GAAiB;YAC1B,IAAI,EAAE,SAAS;YACf,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,OAAO;YACP,SAAS,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE;SAC1E,CAAC;QAEF,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAC9B,CAAC;IAED;;OAEG;IACK,cAAc,CAAC,OAAgC;QACrD,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC;YACtB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,OAAO,OAAO,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;YACxC,OAAO,OAAO,CAAC,OAAO,CAAC;QACzB,CAAC;QAED,iCAAiC;QACjC,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO;aAC9B,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC;aACtD,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAK,CAAC,CAAC;QAE/B,OAAO,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC5D,CAAC;IAED;;OAEG;IACH,KAAK;QACH,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;QACpB,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;IACrB,CAAC;CACF"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import type { FileChangeEvent } from "../types.js";
|
|
2
|
+
export type FileWatcherOptions = {
|
|
3
|
+
/** Debounce delay in milliseconds */
|
|
4
|
+
debounceMs: number;
|
|
5
|
+
/** Glob patterns to match (relative to root) */
|
|
6
|
+
patterns: string[];
|
|
7
|
+
/** Callback for file events */
|
|
8
|
+
onEvent: (event: FileChangeEvent) => void;
|
|
9
|
+
/** Ignored patterns */
|
|
10
|
+
ignored?: string[];
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* File watcher using chokidar with debouncing
|
|
14
|
+
*/
|
|
15
|
+
export declare class FileWatcher {
|
|
16
|
+
private readonly rootDir;
|
|
17
|
+
private readonly options;
|
|
18
|
+
private watcher;
|
|
19
|
+
private debounceTimers;
|
|
20
|
+
private pendingEvents;
|
|
21
|
+
private watching;
|
|
22
|
+
constructor(rootDir: string, options: FileWatcherOptions);
|
|
23
|
+
/**
|
|
24
|
+
* Check if the watcher is currently active
|
|
25
|
+
*/
|
|
26
|
+
get isWatching(): boolean;
|
|
27
|
+
/**
|
|
28
|
+
* Start watching for file changes
|
|
29
|
+
*/
|
|
30
|
+
start(): Promise<void>;
|
|
31
|
+
/**
|
|
32
|
+
* Stop watching for file changes
|
|
33
|
+
*/
|
|
34
|
+
stop(): Promise<void>;
|
|
35
|
+
/**
|
|
36
|
+
* Check if a path matches any of the watch patterns
|
|
37
|
+
*/
|
|
38
|
+
private matchesPatterns;
|
|
39
|
+
/**
|
|
40
|
+
* Handle a file event with debouncing
|
|
41
|
+
*/
|
|
42
|
+
private handleEvent;
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=watcher.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"watcher.d.ts","sourceRoot":"","sources":["../../src/sync/watcher.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEnD,MAAM,MAAM,kBAAkB,GAAG;IAC/B,qCAAqC;IACrC,UAAU,EAAE,MAAM,CAAC;IACnB,gDAAgD;IAChD,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,+BAA+B;IAC/B,OAAO,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,CAAC;IAC1C,uBAAuB;IACvB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB,CAAC;AAEF;;GAEG;AACH,qBAAa,WAAW;IAOpB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAP1B,OAAO,CAAC,OAAO,CAA0B;IACzC,OAAO,CAAC,cAAc,CAAqC;IAC3D,OAAO,CAAC,aAAa,CAA8C;IACnE,OAAO,CAAC,QAAQ,CAAS;gBAGN,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,kBAAkB;IAG9C;;OAEG;IACH,IAAI,UAAU,IAAI,OAAO,CAExB;IAED;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IA0B5B;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAiB3B;;OAEG;IACH,OAAO,CAAC,eAAe;IAIvB;;OAEG;IACH,OAAO,CAAC,WAAW;CAqCpB"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import { watch } from "chokidar";
|
|
2
|
+
import { relative } from "node:path";
|
|
3
|
+
import { minimatch } from "./minimatch.js";
|
|
4
|
+
/**
|
|
5
|
+
* File watcher using chokidar with debouncing
|
|
6
|
+
*/
|
|
7
|
+
export class FileWatcher {
|
|
8
|
+
rootDir;
|
|
9
|
+
options;
|
|
10
|
+
watcher = null;
|
|
11
|
+
debounceTimers = new Map();
|
|
12
|
+
pendingEvents = new Map();
|
|
13
|
+
watching = false;
|
|
14
|
+
constructor(rootDir, options) {
|
|
15
|
+
this.rootDir = rootDir;
|
|
16
|
+
this.options = options;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Check if the watcher is currently active
|
|
20
|
+
*/
|
|
21
|
+
get isWatching() {
|
|
22
|
+
return this.watching;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Start watching for file changes
|
|
26
|
+
*/
|
|
27
|
+
async start() {
|
|
28
|
+
if (this.watcher) {
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
// Watch the root directory, filter by patterns in event handler
|
|
32
|
+
this.watcher = watch(this.rootDir, {
|
|
33
|
+
persistent: true,
|
|
34
|
+
ignoreInitial: true,
|
|
35
|
+
ignored: this.options.ignored,
|
|
36
|
+
depth: 99,
|
|
37
|
+
});
|
|
38
|
+
this.watcher.on("add", (path) => this.handleEvent("add", path));
|
|
39
|
+
this.watcher.on("change", (path) => this.handleEvent("change", path));
|
|
40
|
+
this.watcher.on("unlink", (path) => this.handleEvent("unlink", path));
|
|
41
|
+
// Wait for initial scan to complete
|
|
42
|
+
await new Promise((resolve) => {
|
|
43
|
+
this.watcher.on("ready", () => {
|
|
44
|
+
this.watching = true;
|
|
45
|
+
resolve();
|
|
46
|
+
});
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Stop watching for file changes
|
|
51
|
+
*/
|
|
52
|
+
async stop() {
|
|
53
|
+
if (!this.watcher) {
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
// Clear all pending timers
|
|
57
|
+
for (const timer of this.debounceTimers.values()) {
|
|
58
|
+
clearTimeout(timer);
|
|
59
|
+
}
|
|
60
|
+
this.debounceTimers.clear();
|
|
61
|
+
this.pendingEvents.clear();
|
|
62
|
+
await this.watcher.close();
|
|
63
|
+
this.watcher = null;
|
|
64
|
+
this.watching = false;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Check if a path matches any of the watch patterns
|
|
68
|
+
*/
|
|
69
|
+
matchesPatterns(relPath) {
|
|
70
|
+
return this.options.patterns.some((pattern) => minimatch(relPath, pattern));
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Handle a file event with debouncing
|
|
74
|
+
*/
|
|
75
|
+
handleEvent(type, absPath) {
|
|
76
|
+
const relPath = relative(this.rootDir, absPath);
|
|
77
|
+
// Filter by glob patterns
|
|
78
|
+
if (!this.matchesPatterns(relPath)) {
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
// Clear existing timer for this path
|
|
82
|
+
const existingTimer = this.debounceTimers.get(relPath);
|
|
83
|
+
if (existingTimer) {
|
|
84
|
+
clearTimeout(existingTimer);
|
|
85
|
+
}
|
|
86
|
+
// Update pending event type (unlink takes precedence, then change, then add)
|
|
87
|
+
const currentPending = this.pendingEvents.get(relPath);
|
|
88
|
+
if (type === "unlink" || !currentPending) {
|
|
89
|
+
this.pendingEvents.set(relPath, type);
|
|
90
|
+
}
|
|
91
|
+
else if (type === "change" && currentPending === "add") {
|
|
92
|
+
// Keep add if we get a change right after
|
|
93
|
+
this.pendingEvents.set(relPath, "add");
|
|
94
|
+
}
|
|
95
|
+
else {
|
|
96
|
+
this.pendingEvents.set(relPath, type);
|
|
97
|
+
}
|
|
98
|
+
// Set new debounce timer
|
|
99
|
+
const timer = setTimeout(() => {
|
|
100
|
+
const eventType = this.pendingEvents.get(relPath);
|
|
101
|
+
if (eventType) {
|
|
102
|
+
this.pendingEvents.delete(relPath);
|
|
103
|
+
this.debounceTimers.delete(relPath);
|
|
104
|
+
this.options.onEvent({ type: eventType, path: relPath });
|
|
105
|
+
}
|
|
106
|
+
}, this.options.debounceMs);
|
|
107
|
+
this.debounceTimers.set(relPath, timer);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=watcher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"watcher.js","sourceRoot":"","sources":["../../src/sync/watcher.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAC7E,OAAO,EAAE,SAAS,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAC7E,OAAO,EAAE,SAAS,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { MemoryGetParams, MemoryGetResponse } from "../types.js";
|
|
2
|
+
import type { MemoryManager } from "../memory-manager.js";
|
|
3
|
+
/**
|
|
4
|
+
* Memory get tool function
|
|
5
|
+
*/
|
|
6
|
+
export declare function memoryGet(manager: MemoryManager, params: MemoryGetParams): Promise<MemoryGetResponse>;
|
|
7
|
+
/**
|
|
8
|
+
* Create a memory get tool definition
|
|
9
|
+
*/
|
|
10
|
+
export declare function createMemoryGetToolDef(): {
|
|
11
|
+
name: string;
|
|
12
|
+
description: string;
|
|
13
|
+
inputSchema: {
|
|
14
|
+
type: "object";
|
|
15
|
+
properties: {
|
|
16
|
+
path: {
|
|
17
|
+
type: string;
|
|
18
|
+
description: string;
|
|
19
|
+
};
|
|
20
|
+
from: {
|
|
21
|
+
type: string;
|
|
22
|
+
description: string;
|
|
23
|
+
};
|
|
24
|
+
lines: {
|
|
25
|
+
type: string;
|
|
26
|
+
description: string;
|
|
27
|
+
};
|
|
28
|
+
};
|
|
29
|
+
required: string[];
|
|
30
|
+
};
|
|
31
|
+
};
|
|
32
|
+
//# sourceMappingURL=memory-get.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-get.d.ts","sourceRoot":"","sources":["../../src/tools/memory-get.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACtE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAE1D;;GAEG;AACH,wBAAsB,SAAS,CAC7B,OAAO,EAAE,aAAa,EACtB,MAAM,EAAE,eAAe,GACtB,OAAO,CAAC,iBAAiB,CAAC,CAqB5B;AAED;;GAEG;AACH,wBAAgB,sBAAsB;;;;;;;;;;;;;;;;;;;;;EAwBrC"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Memory get tool function
|
|
3
|
+
*/
|
|
4
|
+
export async function memoryGet(manager, params) {
|
|
5
|
+
try {
|
|
6
|
+
const result = await manager.readFile({
|
|
7
|
+
relPath: params.path,
|
|
8
|
+
from: params.from,
|
|
9
|
+
lines: params.lines,
|
|
10
|
+
});
|
|
11
|
+
return {
|
|
12
|
+
success: true,
|
|
13
|
+
content: result.content,
|
|
14
|
+
path: params.path,
|
|
15
|
+
startLine: result.startLine,
|
|
16
|
+
endLine: result.endLine,
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
catch (err) {
|
|
20
|
+
return {
|
|
21
|
+
success: false,
|
|
22
|
+
error: err instanceof Error ? err.message : String(err),
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Create a memory get tool definition
|
|
28
|
+
*/
|
|
29
|
+
export function createMemoryGetToolDef() {
|
|
30
|
+
return {
|
|
31
|
+
name: "memory_get",
|
|
32
|
+
description: "Read content from a specific file in the agent's memory. Use after memory_search to retrieve full context.",
|
|
33
|
+
inputSchema: {
|
|
34
|
+
type: "object",
|
|
35
|
+
properties: {
|
|
36
|
+
path: {
|
|
37
|
+
type: "string",
|
|
38
|
+
description: "Relative path to the memory file",
|
|
39
|
+
},
|
|
40
|
+
from: {
|
|
41
|
+
type: "number",
|
|
42
|
+
description: "Starting line number (1-indexed, default: 1)",
|
|
43
|
+
},
|
|
44
|
+
lines: {
|
|
45
|
+
type: "number",
|
|
46
|
+
description: "Number of lines to read (default: entire file)",
|
|
47
|
+
},
|
|
48
|
+
},
|
|
49
|
+
required: ["path"],
|
|
50
|
+
},
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=memory-get.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-get.js","sourceRoot":"","sources":["../../src/tools/memory-get.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,OAAsB,EACtB,MAAuB;IAEvB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC;YACpC,OAAO,EAAE,MAAM,CAAC,IAAI;YACpB,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,KAAK,EAAE,MAAM,CAAC,KAAK;SACpB,CAAC,CAAC;QAEH,OAAO;YACL,OAAO,EAAE,IAAI;YACb,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,OAAO,EAAE,MAAM,CAAC,OAAO;SACxB,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;SACxD,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,sBAAsB;IACpC,OAAO;QACL,IAAI,EAAE,YAAY;QAClB,WAAW,EACT,4GAA4G;QAC9G,WAAW,EAAE;YACX,IAAI,EAAE,QAAiB;YACvB,UAAU,EAAE;gBACV,IAAI,EAAE;oBACJ,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,kCAAkC;iBAChD;gBACD,IAAI,EAAE;oBACJ,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,8CAA8C;iBAC5D;gBACD,KAAK,EAAE;oBACL,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,gDAAgD;iBAC9D;aACF;YACD,QAAQ,EAAE,CAAC,MAAM,CAAC;SACnB;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { MemorySearchParams, MemorySearchResponse } from "../types.js";
|
|
2
|
+
import type { MemoryManager } from "../memory-manager.js";
|
|
3
|
+
/**
|
|
4
|
+
* Memory search tool function
|
|
5
|
+
*/
|
|
6
|
+
export declare function memorySearch(manager: MemoryManager, params: MemorySearchParams): Promise<MemorySearchResponse>;
|
|
7
|
+
/**
|
|
8
|
+
* Create a memory search tool definition
|
|
9
|
+
*/
|
|
10
|
+
export declare function createMemorySearchToolDef(): {
|
|
11
|
+
name: string;
|
|
12
|
+
description: string;
|
|
13
|
+
inputSchema: {
|
|
14
|
+
type: "object";
|
|
15
|
+
properties: {
|
|
16
|
+
query: {
|
|
17
|
+
type: string;
|
|
18
|
+
description: string;
|
|
19
|
+
};
|
|
20
|
+
maxResults: {
|
|
21
|
+
type: string;
|
|
22
|
+
description: string;
|
|
23
|
+
};
|
|
24
|
+
minScore: {
|
|
25
|
+
type: string;
|
|
26
|
+
description: string;
|
|
27
|
+
};
|
|
28
|
+
};
|
|
29
|
+
required: string[];
|
|
30
|
+
};
|
|
31
|
+
};
|
|
32
|
+
//# sourceMappingURL=memory-search.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-search.d.ts","sourceRoot":"","sources":["../../src/tools/memory-search.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAC5E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAE1D;;GAEG;AACH,wBAAsB,YAAY,CAChC,OAAO,EAAE,aAAa,EACtB,MAAM,EAAE,kBAAkB,GACzB,OAAO,CAAC,oBAAoB,CAAC,CAyB/B;AAED;;GAEG;AACH,wBAAgB,yBAAyB;;;;;;;;;;;;;;;;;;;;;EAwBxC"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Memory search tool function
|
|
3
|
+
*/
|
|
4
|
+
export async function memorySearch(manager, params) {
|
|
5
|
+
try {
|
|
6
|
+
const results = await manager.search(params.query, {
|
|
7
|
+
maxResults: params.maxResults,
|
|
8
|
+
minScore: params.minScore,
|
|
9
|
+
});
|
|
10
|
+
const providerInfo = manager.getProviderInfo();
|
|
11
|
+
return {
|
|
12
|
+
success: true,
|
|
13
|
+
results,
|
|
14
|
+
meta: {
|
|
15
|
+
provider: providerInfo.provider,
|
|
16
|
+
model: providerInfo.model,
|
|
17
|
+
fallbackFrom: providerInfo.fallbackFrom,
|
|
18
|
+
fallbackReason: providerInfo.fallbackReason,
|
|
19
|
+
},
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
catch (err) {
|
|
23
|
+
return {
|
|
24
|
+
success: false,
|
|
25
|
+
error: err instanceof Error ? err.message : String(err),
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Create a memory search tool definition
|
|
31
|
+
*/
|
|
32
|
+
export function createMemorySearchToolDef() {
|
|
33
|
+
return {
|
|
34
|
+
name: "memory_search",
|
|
35
|
+
description: "Search the agent's memory for relevant information. Returns snippets from indexed markdown files.",
|
|
36
|
+
inputSchema: {
|
|
37
|
+
type: "object",
|
|
38
|
+
properties: {
|
|
39
|
+
query: {
|
|
40
|
+
type: "string",
|
|
41
|
+
description: "The search query",
|
|
42
|
+
},
|
|
43
|
+
maxResults: {
|
|
44
|
+
type: "number",
|
|
45
|
+
description: "Maximum number of results to return (default: 10)",
|
|
46
|
+
},
|
|
47
|
+
minScore: {
|
|
48
|
+
type: "number",
|
|
49
|
+
description: "Minimum relevance score threshold (0-1, default: 0.35)",
|
|
50
|
+
},
|
|
51
|
+
},
|
|
52
|
+
required: ["query"],
|
|
53
|
+
},
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=memory-search.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-search.js","sourceRoot":"","sources":["../../src/tools/memory-search.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,OAAsB,EACtB,MAA0B;IAE1B,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE;YACjD,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,QAAQ,EAAE,MAAM,CAAC,QAAQ;SAC1B,CAAC,CAAC;QAEH,MAAM,YAAY,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;QAE/C,OAAO;YACL,OAAO,EAAE,IAAI;YACb,OAAO;YACP,IAAI,EAAE;gBACJ,QAAQ,EAAE,YAAY,CAAC,QAAQ;gBAC/B,KAAK,EAAE,YAAY,CAAC,KAAK;gBACzB,YAAY,EAAE,YAAY,CAAC,YAAY;gBACvC,cAAc,EAAE,YAAY,CAAC,cAAc;aAC5C;SACF,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;SACxD,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,yBAAyB;IACvC,OAAO;QACL,IAAI,EAAE,eAAe;QACrB,WAAW,EACT,mGAAmG;QACrG,WAAW,EAAE;YACX,IAAI,EAAE,QAAiB;YACvB,UAAU,EAAE;gBACV,KAAK,EAAE;oBACL,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,kBAAkB;iBAChC;gBACD,UAAU,EAAE;oBACV,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,mDAAmD;iBACjE;gBACD,QAAQ,EAAE;oBACR,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,wDAAwD;iBACtE;aACF;YACD,QAAQ,EAAE,CAAC,OAAO,CAAC;SACpB;KACF,CAAC;AACJ,CAAC"}
|