@chendpoc/pi-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/README.md +180 -0
- package/dist/adapters/piComplete.d.ts +17 -0
- package/dist/adapters/piComplete.d.ts.map +1 -0
- package/dist/adapters/piComplete.js +169 -0
- package/dist/adapters/piComplete.js.map +1 -0
- package/dist/bundle/install.d.ts +34 -0
- package/dist/bundle/install.d.ts.map +1 -0
- package/dist/bundle/install.js +183 -0
- package/dist/bundle/install.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +245 -0
- package/dist/cli.js.map +1 -0
- package/dist/config.d.ts +27 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +49 -0
- package/dist/config.js.map +1 -0
- package/dist/errclass.d.ts +7 -0
- package/dist/errclass.d.ts.map +1 -0
- package/dist/errclass.js +32 -0
- package/dist/errclass.js.map +1 -0
- package/dist/extension.d.ts +24 -0
- package/dist/extension.d.ts.map +1 -0
- package/dist/extension.js +7 -0
- package/dist/extension.js.map +1 -0
- package/dist/fallback/index.d.ts +11 -0
- package/dist/fallback/index.d.ts.map +1 -0
- package/dist/fallback/index.js +16 -0
- package/dist/fallback/index.js.map +1 -0
- package/dist/fallback/llmRerank.d.ts +19 -0
- package/dist/fallback/llmRerank.d.ts.map +1 -0
- package/dist/fallback/llmRerank.js +60 -0
- package/dist/fallback/llmRerank.js.map +1 -0
- package/dist/fallback/memoryMd.d.ts +6 -0
- package/dist/fallback/memoryMd.d.ts.map +1 -0
- package/dist/fallback/memoryMd.js +35 -0
- package/dist/fallback/memoryMd.js.map +1 -0
- package/dist/fallback/sessionIndex.d.ts +35 -0
- package/dist/fallback/sessionIndex.d.ts.map +1 -0
- package/dist/fallback/sessionIndex.js +222 -0
- package/dist/fallback/sessionIndex.js.map +1 -0
- package/dist/fallback/sessionSearch.d.ts +18 -0
- package/dist/fallback/sessionSearch.d.ts.map +1 -0
- package/dist/fallback/sessionSearch.js +161 -0
- package/dist/fallback/sessionSearch.js.map +1 -0
- package/dist/index.d.ts +25 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +24 -0
- package/dist/index.js.map +1 -0
- package/dist/paths.d.ts +7 -0
- package/dist/paths.d.ts.map +1 -0
- package/dist/paths.js +26 -0
- package/dist/paths.js.map +1 -0
- package/dist/pi-extension.d.ts +6 -0
- package/dist/pi-extension.d.ts.map +1 -0
- package/dist/pi-extension.js +224 -0
- package/dist/pi-extension.js.map +1 -0
- package/dist/preflight/detectIntents.d.ts +102 -0
- package/dist/preflight/detectIntents.d.ts.map +1 -0
- package/dist/preflight/detectIntents.js +624 -0
- package/dist/preflight/detectIntents.js.map +1 -0
- package/dist/preflight/hook.d.ts +58 -0
- package/dist/preflight/hook.d.ts.map +1 -0
- package/dist/preflight/hook.js +77 -0
- package/dist/preflight/hook.js.map +1 -0
- package/dist/preflight/render.d.ts +21 -0
- package/dist/preflight/render.d.ts.map +1 -0
- package/dist/preflight/render.js +132 -0
- package/dist/preflight/render.js.map +1 -0
- package/dist/preflight/strip.d.ts +11 -0
- package/dist/preflight/strip.d.ts.map +1 -0
- package/dist/preflight/strip.js +46 -0
- package/dist/preflight/strip.js.map +1 -0
- package/dist/service.d.ts +56 -0
- package/dist/service.d.ts.map +1 -0
- package/dist/service.js +158 -0
- package/dist/service.js.map +1 -0
- package/dist/sidecar/bundle.d.ts +19 -0
- package/dist/sidecar/bundle.d.ts.map +1 -0
- package/dist/sidecar/bundle.js +39 -0
- package/dist/sidecar/bundle.js.map +1 -0
- package/dist/sidecar/client.d.ts +17 -0
- package/dist/sidecar/client.d.ts.map +1 -0
- package/dist/sidecar/client.js +107 -0
- package/dist/sidecar/client.js.map +1 -0
- package/dist/sidecar/process.d.ts +14 -0
- package/dist/sidecar/process.d.ts.map +1 -0
- package/dist/sidecar/process.js +126 -0
- package/dist/sidecar/process.js.map +1 -0
- package/dist/tools/memoryAppend.d.ts +37 -0
- package/dist/tools/memoryAppend.d.ts.map +1 -0
- package/dist/tools/memoryAppend.js +99 -0
- package/dist/tools/memoryAppend.js.map +1 -0
- package/dist/tools/memoryRecall.d.ts +113 -0
- package/dist/tools/memoryRecall.d.ts.map +1 -0
- package/dist/tools/memoryRecall.js +325 -0
- package/dist/tools/memoryRecall.js.map +1 -0
- package/dist/trainer/bundleBuilder.d.ts +30 -0
- package/dist/trainer/bundleBuilder.d.ts.map +1 -0
- package/dist/trainer/bundleBuilder.js +106 -0
- package/dist/trainer/bundleBuilder.js.map +1 -0
- package/dist/trainer/bundleLoader.d.ts +12 -0
- package/dist/trainer/bundleLoader.d.ts.map +1 -0
- package/dist/trainer/bundleLoader.js +59 -0
- package/dist/trainer/bundleLoader.js.map +1 -0
- package/dist/trainer/deltaMerge.d.ts +38 -0
- package/dist/trainer/deltaMerge.d.ts.map +1 -0
- package/dist/trainer/deltaMerge.js +183 -0
- package/dist/trainer/deltaMerge.js.map +1 -0
- package/dist/trainer/entityResolver.d.ts +27 -0
- package/dist/trainer/entityResolver.d.ts.map +1 -0
- package/dist/trainer/entityResolver.js +92 -0
- package/dist/trainer/entityResolver.js.map +1 -0
- package/dist/trainer/extractFacts.d.ts +67 -0
- package/dist/trainer/extractFacts.d.ts.map +1 -0
- package/dist/trainer/extractFacts.js +213 -0
- package/dist/trainer/extractFacts.js.map +1 -0
- package/dist/trainer/index.d.ts +54 -0
- package/dist/trainer/index.d.ts.map +1 -0
- package/dist/trainer/index.js +82 -0
- package/dist/trainer/index.js.map +1 -0
- package/dist/trainer/llmExtractor.d.ts +16 -0
- package/dist/trainer/llmExtractor.d.ts.map +1 -0
- package/dist/trainer/llmExtractor.js +146 -0
- package/dist/trainer/llmExtractor.js.map +1 -0
- package/dist/trainer/marker.d.ts +10 -0
- package/dist/trainer/marker.d.ts.map +1 -0
- package/dist/trainer/marker.js +28 -0
- package/dist/trainer/marker.js.map +1 -0
- package/dist/trainer/scheduler.d.ts +31 -0
- package/dist/trainer/scheduler.d.ts.map +1 -0
- package/dist/trainer/scheduler.js +72 -0
- package/dist/trainer/scheduler.js.map +1 -0
- package/dist/trainer/sessionLoader.d.ts +23 -0
- package/dist/trainer/sessionLoader.d.ts.map +1 -0
- package/dist/trainer/sessionLoader.js +106 -0
- package/dist/trainer/sessionLoader.js.map +1 -0
- package/dist/types.d.ts +135 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +8 -0
- package/dist/types.js.map +1 -0
- package/package.json +78 -0
- package/src/adapters/piComplete.ts +233 -0
- package/src/bundle/install.ts +206 -0
- package/src/cli.ts +254 -0
- package/src/config.ts +92 -0
- package/src/errclass.ts +37 -0
- package/src/extension.ts +23 -0
- package/src/fallback/index.ts +24 -0
- package/src/fallback/llmRerank.ts +90 -0
- package/src/fallback/memoryMd.ts +36 -0
- package/src/fallback/sessionIndex.ts +289 -0
- package/src/fallback/sessionSearch.ts +181 -0
- package/src/index.ts +213 -0
- package/src/paths.ts +28 -0
- package/src/pi-extension.ts +276 -0
- package/src/preflight/detectIntents.ts +654 -0
- package/src/preflight/hook.ts +136 -0
- package/src/preflight/render.ts +185 -0
- package/src/preflight/strip.ts +50 -0
- package/src/service.ts +202 -0
- package/src/sidecar/bundle.ts +52 -0
- package/src/sidecar/client.ts +166 -0
- package/src/sidecar/process.ts +145 -0
- package/src/tools/memoryAppend.ts +113 -0
- package/src/tools/memoryRecall.ts +364 -0
- package/src/trainer/bundleBuilder.ts +192 -0
- package/src/trainer/bundleLoader.ts +105 -0
- package/src/trainer/deltaMerge.ts +221 -0
- package/src/trainer/entityResolver.ts +140 -0
- package/src/trainer/extractFacts.ts +312 -0
- package/src/trainer/index.ts +147 -0
- package/src/trainer/llmExtractor.ts +206 -0
- package/src/trainer/marker.ts +30 -0
- package/src/trainer/scheduler.ts +104 -0
- package/src/trainer/sessionLoader.ts +139 -0
- package/src/types.ts +168 -0
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { SessionSearchHit } from "./sessionSearch.js";
|
|
2
|
+
export interface SqliteDatabase {
|
|
3
|
+
pragma(sql: string): unknown;
|
|
4
|
+
exec(sql: string): void;
|
|
5
|
+
prepare(sql: string): {
|
|
6
|
+
run(...args: unknown[]): unknown;
|
|
7
|
+
get(...args: unknown[]): unknown;
|
|
8
|
+
all(...args: unknown[]): unknown[];
|
|
9
|
+
};
|
|
10
|
+
transaction<T>(fn: () => T): () => T;
|
|
11
|
+
close(): void;
|
|
12
|
+
}
|
|
13
|
+
export interface SessionIndex {
|
|
14
|
+
/** Full rebuild — drop and re-populate from all session files. */
|
|
15
|
+
rebuildIndex(sessionsDir: string): Promise<{
|
|
16
|
+
indexed: number;
|
|
17
|
+
}>;
|
|
18
|
+
/** Incremental — only index sessions modified after lastIndexedTs. */
|
|
19
|
+
incrementalIndex(sessionsDir: string, lastIndexedTs?: Date | null): Promise<{
|
|
20
|
+
indexed: number;
|
|
21
|
+
}>;
|
|
22
|
+
/** FTS5 search returning the same shape as sessionKeywordSearch. */
|
|
23
|
+
search(query: string, limit: number): SessionSearchHit[];
|
|
24
|
+
/** Retrieve the last-indexed timestamp from DB metadata. */
|
|
25
|
+
getLastIndexedTs(): Date | null;
|
|
26
|
+
/** Close the database connection. */
|
|
27
|
+
close(): void;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Open (or create) the SQLite FTS5 index.
|
|
31
|
+
* Pass ":memory:" as dbPath for tests.
|
|
32
|
+
* Optionally pass a pre-built SqliteDatabase for testing without native deps.
|
|
33
|
+
*/
|
|
34
|
+
export declare function openSessionIndex(dbPath: string, injectedDb?: SqliteDatabase): SessionIndex | null;
|
|
35
|
+
//# sourceMappingURL=sessionIndex.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sessionIndex.d.ts","sourceRoot":"","sources":["../../src/fallback/sessionIndex.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAE3D,MAAM,WAAW,cAAc;IAC7B,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IAC7B,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG;QACpB,GAAG,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;QACjC,GAAG,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;QACjC,GAAG,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,OAAO,EAAE,CAAC;KACpC,CAAC;IACF,WAAW,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC;IACrC,KAAK,IAAI,IAAI,CAAC;CACf;AA6CD,MAAM,WAAW,YAAY;IAC3B,kEAAkE;IAClE,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAChE,sEAAsE;IACtE,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACjG,oEAAoE;IACpE,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,gBAAgB,EAAE,CAAC;IACzD,4DAA4D;IAC5D,gBAAgB,IAAI,IAAI,GAAG,IAAI,CAAC;IAChC,qCAAqC;IACrC,KAAK,IAAI,IAAI,CAAC;CACf;AAkBD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,cAAc,GAAG,YAAY,GAAG,IAAI,CAiMjG"}
|
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import fs from "node:fs/promises";
|
|
3
|
+
import { createRequire } from "node:module";
|
|
4
|
+
import path from "node:path";
|
|
5
|
+
/**
|
|
6
|
+
* Lazy-loaded better-sqlite3 via createRequire (ESM-compatible).
|
|
7
|
+
* Returns null if the package is not installed (graceful degradation).
|
|
8
|
+
*/
|
|
9
|
+
function loadSqlite() {
|
|
10
|
+
try {
|
|
11
|
+
const require = createRequire(import.meta.url);
|
|
12
|
+
const mod = require("better-sqlite3");
|
|
13
|
+
return mod;
|
|
14
|
+
}
|
|
15
|
+
catch {
|
|
16
|
+
return null;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
function messageText(content) {
|
|
20
|
+
if (typeof content === "string")
|
|
21
|
+
return content;
|
|
22
|
+
if (!Array.isArray(content))
|
|
23
|
+
return "";
|
|
24
|
+
const parts = [];
|
|
25
|
+
for (const block of content) {
|
|
26
|
+
if (typeof block === "string") {
|
|
27
|
+
parts.push(block);
|
|
28
|
+
continue;
|
|
29
|
+
}
|
|
30
|
+
if (block && typeof block === "object") {
|
|
31
|
+
const b = block;
|
|
32
|
+
if (typeof b.text === "string")
|
|
33
|
+
parts.push(b.text);
|
|
34
|
+
else if (typeof b.content === "string")
|
|
35
|
+
parts.push(b.content);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
return parts.join("\n");
|
|
39
|
+
}
|
|
40
|
+
const SCHEMA_SQL = `
|
|
41
|
+
CREATE TABLE IF NOT EXISTS meta (
|
|
42
|
+
key TEXT PRIMARY KEY,
|
|
43
|
+
value TEXT
|
|
44
|
+
);
|
|
45
|
+
CREATE VIRTUAL TABLE IF NOT EXISTS session_fts USING fts5(
|
|
46
|
+
session_id,
|
|
47
|
+
turn_idx,
|
|
48
|
+
role,
|
|
49
|
+
content,
|
|
50
|
+
session_title,
|
|
51
|
+
created_at,
|
|
52
|
+
tokenize='unicode61'
|
|
53
|
+
);
|
|
54
|
+
`;
|
|
55
|
+
/**
|
|
56
|
+
* Open (or create) the SQLite FTS5 index.
|
|
57
|
+
* Pass ":memory:" as dbPath for tests.
|
|
58
|
+
* Optionally pass a pre-built SqliteDatabase for testing without native deps.
|
|
59
|
+
*/
|
|
60
|
+
export function openSessionIndex(dbPath, injectedDb) {
|
|
61
|
+
let db;
|
|
62
|
+
if (injectedDb) {
|
|
63
|
+
db = injectedDb;
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
const Sqlite = loadSqlite();
|
|
67
|
+
if (!Sqlite)
|
|
68
|
+
return null;
|
|
69
|
+
db = new Sqlite(dbPath);
|
|
70
|
+
}
|
|
71
|
+
db.pragma("journal_mode = WAL");
|
|
72
|
+
db.exec(SCHEMA_SQL);
|
|
73
|
+
function setMeta(key, value) {
|
|
74
|
+
db.prepare("INSERT OR REPLACE INTO meta (key, value) VALUES (?, ?)").run(key, value);
|
|
75
|
+
}
|
|
76
|
+
function getMeta(key) {
|
|
77
|
+
const row = db.prepare("SELECT value FROM meta WHERE key = ?").get(key);
|
|
78
|
+
return row?.value ?? null;
|
|
79
|
+
}
|
|
80
|
+
function insertTurns(sessions) {
|
|
81
|
+
const insert = db.prepare("INSERT INTO session_fts (session_id, turn_idx, role, content, session_title, created_at) VALUES (?, ?, ?, ?, ?, ?)");
|
|
82
|
+
let count = 0;
|
|
83
|
+
const seenContent = new Set();
|
|
84
|
+
const tx = db.transaction(() => {
|
|
85
|
+
for (const s of sessions) {
|
|
86
|
+
for (const m of s.messages) {
|
|
87
|
+
if (!m.content.trim())
|
|
88
|
+
continue;
|
|
89
|
+
const fingerprint = createHash("sha256")
|
|
90
|
+
.update(m.content)
|
|
91
|
+
.digest("hex")
|
|
92
|
+
.slice(0, 16);
|
|
93
|
+
if (seenContent.has(fingerprint))
|
|
94
|
+
continue;
|
|
95
|
+
seenContent.add(fingerprint);
|
|
96
|
+
insert.run(s.id, String(m.index), m.role, m.content, s.title, s.createdAt);
|
|
97
|
+
count++;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
});
|
|
101
|
+
tx();
|
|
102
|
+
return count;
|
|
103
|
+
}
|
|
104
|
+
async function loadSessionFiles(sessionsDir, modifiedAfter) {
|
|
105
|
+
let entries;
|
|
106
|
+
try {
|
|
107
|
+
entries = await fs.readdir(sessionsDir);
|
|
108
|
+
}
|
|
109
|
+
catch {
|
|
110
|
+
return [];
|
|
111
|
+
}
|
|
112
|
+
const results = [];
|
|
113
|
+
for (const name of entries) {
|
|
114
|
+
if (!name.endsWith(".json"))
|
|
115
|
+
continue;
|
|
116
|
+
const filePath = path.join(sessionsDir, name);
|
|
117
|
+
let st;
|
|
118
|
+
try {
|
|
119
|
+
st = await fs.stat(filePath);
|
|
120
|
+
}
|
|
121
|
+
catch {
|
|
122
|
+
continue;
|
|
123
|
+
}
|
|
124
|
+
if (!st.isFile())
|
|
125
|
+
continue;
|
|
126
|
+
if (modifiedAfter && st.mtime <= modifiedAfter)
|
|
127
|
+
continue;
|
|
128
|
+
let session;
|
|
129
|
+
try {
|
|
130
|
+
const raw = await fs.readFile(filePath, "utf8");
|
|
131
|
+
session = JSON.parse(raw);
|
|
132
|
+
}
|
|
133
|
+
catch {
|
|
134
|
+
continue;
|
|
135
|
+
}
|
|
136
|
+
const sessionId = session.id ?? path.basename(name, ".json");
|
|
137
|
+
const messages = [];
|
|
138
|
+
for (let i = 0; i < (session.messages?.length ?? 0); i++) {
|
|
139
|
+
const msg = session.messages[i];
|
|
140
|
+
const text = messageText(msg.content);
|
|
141
|
+
if (text.trim()) {
|
|
142
|
+
messages.push({ role: msg.role ?? "unknown", content: text, index: i });
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
if (messages.length > 0) {
|
|
146
|
+
results.push({
|
|
147
|
+
id: sessionId,
|
|
148
|
+
title: session.title ?? "",
|
|
149
|
+
createdAt: session.created_at ?? "",
|
|
150
|
+
messages,
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
return results;
|
|
155
|
+
}
|
|
156
|
+
return {
|
|
157
|
+
async rebuildIndex(sessionsDir) {
|
|
158
|
+
db.exec("DELETE FROM session_fts");
|
|
159
|
+
const sessions = await loadSessionFiles(sessionsDir);
|
|
160
|
+
const indexed = insertTurns(sessions);
|
|
161
|
+
setMeta("last_indexed_ts", new Date().toISOString());
|
|
162
|
+
return { indexed };
|
|
163
|
+
},
|
|
164
|
+
async incrementalIndex(sessionsDir, lastIndexedTs) {
|
|
165
|
+
const effectiveTs = lastIndexedTs ??
|
|
166
|
+
(() => {
|
|
167
|
+
const raw = getMeta("last_indexed_ts");
|
|
168
|
+
return raw ? new Date(raw) : null;
|
|
169
|
+
})();
|
|
170
|
+
const sessions = await loadSessionFiles(sessionsDir, effectiveTs);
|
|
171
|
+
if (sessions.length === 0)
|
|
172
|
+
return { indexed: 0 };
|
|
173
|
+
const sessionIds = sessions.map((s) => s.id);
|
|
174
|
+
const deletePlaceholders = sessionIds.map(() => "?").join(",");
|
|
175
|
+
db.prepare(`DELETE FROM session_fts WHERE session_id IN (${deletePlaceholders})`).run(...sessionIds);
|
|
176
|
+
const indexed = insertTurns(sessions);
|
|
177
|
+
setMeta("last_indexed_ts", new Date().toISOString());
|
|
178
|
+
return { indexed };
|
|
179
|
+
},
|
|
180
|
+
search(query, limit) {
|
|
181
|
+
const q = query.trim();
|
|
182
|
+
if (!q || limit <= 0)
|
|
183
|
+
return [];
|
|
184
|
+
const ftsQuery = q
|
|
185
|
+
.split(/\s+/)
|
|
186
|
+
.filter(Boolean)
|
|
187
|
+
.map((term) => `"${term.replace(/"/g, '""')}"`)
|
|
188
|
+
.join(" AND ");
|
|
189
|
+
if (!ftsQuery)
|
|
190
|
+
return [];
|
|
191
|
+
try {
|
|
192
|
+
const rows = db.prepare(`SELECT session_id, turn_idx, role, snippet(session_fts, 3, '>>>', '<<<', '...', 40) as snip, session_title, created_at
|
|
193
|
+
FROM session_fts
|
|
194
|
+
WHERE session_fts MATCH ?
|
|
195
|
+
ORDER BY rank
|
|
196
|
+
LIMIT ?`).all(ftsQuery, limit);
|
|
197
|
+
return rows.map((r) => ({
|
|
198
|
+
session_id: r.session_id,
|
|
199
|
+
session_title: r.session_title,
|
|
200
|
+
role: r.role,
|
|
201
|
+
snippet: r.snip.replace(/>>>/g, "").replace(/<<</g, ""),
|
|
202
|
+
msg_index: parseInt(r.turn_idx, 10),
|
|
203
|
+
created_at: r.created_at,
|
|
204
|
+
}));
|
|
205
|
+
}
|
|
206
|
+
catch {
|
|
207
|
+
return [];
|
|
208
|
+
}
|
|
209
|
+
},
|
|
210
|
+
getLastIndexedTs() {
|
|
211
|
+
const raw = getMeta("last_indexed_ts");
|
|
212
|
+
if (!raw)
|
|
213
|
+
return null;
|
|
214
|
+
const d = new Date(raw);
|
|
215
|
+
return isNaN(d.getTime()) ? null : d;
|
|
216
|
+
},
|
|
217
|
+
close() {
|
|
218
|
+
db.close();
|
|
219
|
+
},
|
|
220
|
+
};
|
|
221
|
+
}
|
|
222
|
+
//# sourceMappingURL=sessionIndex.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sessionIndex.js","sourceRoot":"","sources":["../../src/fallback/sessionIndex.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/** Mirrors Kocoro session.SearchResult for fallback hits. */
|
|
2
|
+
export interface SessionSearchHit {
|
|
3
|
+
session_id: string;
|
|
4
|
+
session_title: string;
|
|
5
|
+
role: string;
|
|
6
|
+
snippet: string;
|
|
7
|
+
msg_index: number;
|
|
8
|
+
created_at: string;
|
|
9
|
+
}
|
|
10
|
+
/** Default session DB path. */
|
|
11
|
+
export declare function defaultSessionDbPath(sessionsDir: string): string;
|
|
12
|
+
/**
|
|
13
|
+
* Keyword search over Pi-style session JSON files (one directory level).
|
|
14
|
+
* Uses FTS5 index when available, falls back to file scan.
|
|
15
|
+
* All whitespace-separated terms must match (case-insensitive AND).
|
|
16
|
+
*/
|
|
17
|
+
export declare function sessionKeywordSearch(sessionsDir: string, query: string, limit: number): Promise<SessionSearchHit[]>;
|
|
18
|
+
//# sourceMappingURL=sessionSearch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sessionSearch.d.ts","sourceRoot":"","sources":["../../src/fallback/sessionSearch.ts"],"names":[],"mappings":"AAKA,6DAA6D;AAC7D,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB;AAiBD,+BAA+B;AAC/B,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAEhE;AAgBD;;;;GAIG;AACH,wBAAsB,oBAAoB,CACxC,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,gBAAgB,EAAE,CAAC,CA+D7B"}
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
import fsSync from "node:fs";
|
|
2
|
+
import fs from "node:fs/promises";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import { openSessionIndex } from "./sessionIndex.js";
|
|
5
|
+
let cachedIndex = null;
|
|
6
|
+
let cachedDbPath = null;
|
|
7
|
+
/**
|
|
8
|
+
* Get or open the FTS5 session index. Returns null if better-sqlite3
|
|
9
|
+
* is unavailable or the DB file doesn't exist.
|
|
10
|
+
*/
|
|
11
|
+
function getSessionIndex(dbPath) {
|
|
12
|
+
if (cachedIndex && cachedDbPath === dbPath)
|
|
13
|
+
return cachedIndex;
|
|
14
|
+
if (!fsSync.existsSync(dbPath))
|
|
15
|
+
return null;
|
|
16
|
+
cachedIndex = openSessionIndex(dbPath);
|
|
17
|
+
cachedDbPath = dbPath;
|
|
18
|
+
return cachedIndex;
|
|
19
|
+
}
|
|
20
|
+
/** Default session DB path. */
|
|
21
|
+
export function defaultSessionDbPath(sessionsDir) {
|
|
22
|
+
return path.join(path.dirname(sessionsDir), "memory", "sessions.db");
|
|
23
|
+
}
|
|
24
|
+
const SNIPPET_MAX = 240;
|
|
25
|
+
/**
|
|
26
|
+
* Keyword search over Pi-style session JSON files (one directory level).
|
|
27
|
+
* Uses FTS5 index when available, falls back to file scan.
|
|
28
|
+
* All whitespace-separated terms must match (case-insensitive AND).
|
|
29
|
+
*/
|
|
30
|
+
export async function sessionKeywordSearch(sessionsDir, query, limit) {
|
|
31
|
+
if (!sessionsDir.trim())
|
|
32
|
+
return [];
|
|
33
|
+
const q = query.trim();
|
|
34
|
+
if (!q)
|
|
35
|
+
return [];
|
|
36
|
+
if (limit <= 0)
|
|
37
|
+
limit = 20;
|
|
38
|
+
const dbPath = defaultSessionDbPath(sessionsDir);
|
|
39
|
+
const idx = getSessionIndex(dbPath);
|
|
40
|
+
if (idx) {
|
|
41
|
+
const results = idx.search(q, limit);
|
|
42
|
+
if (results.length > 0)
|
|
43
|
+
return results;
|
|
44
|
+
}
|
|
45
|
+
const terms = splitTerms(q);
|
|
46
|
+
if (terms.length === 0)
|
|
47
|
+
return [];
|
|
48
|
+
let entries;
|
|
49
|
+
try {
|
|
50
|
+
entries = await fs.readdir(sessionsDir);
|
|
51
|
+
}
|
|
52
|
+
catch {
|
|
53
|
+
return [];
|
|
54
|
+
}
|
|
55
|
+
const hits = [];
|
|
56
|
+
for (const name of entries) {
|
|
57
|
+
if (!name.endsWith(".json"))
|
|
58
|
+
continue;
|
|
59
|
+
const filePath = path.join(sessionsDir, name);
|
|
60
|
+
let st;
|
|
61
|
+
try {
|
|
62
|
+
st = await fs.stat(filePath);
|
|
63
|
+
}
|
|
64
|
+
catch {
|
|
65
|
+
continue;
|
|
66
|
+
}
|
|
67
|
+
if (!st.isFile())
|
|
68
|
+
continue;
|
|
69
|
+
let session;
|
|
70
|
+
try {
|
|
71
|
+
const raw = await fs.readFile(filePath, "utf8");
|
|
72
|
+
session = JSON.parse(raw);
|
|
73
|
+
}
|
|
74
|
+
catch {
|
|
75
|
+
continue;
|
|
76
|
+
}
|
|
77
|
+
const sessionId = session.id ?? path.basename(name, ".json");
|
|
78
|
+
const title = session.title ?? "";
|
|
79
|
+
const createdAt = session.created_at ?? "";
|
|
80
|
+
for (let i = 0; i < (session.messages?.length ?? 0); i++) {
|
|
81
|
+
const msg = session.messages[i];
|
|
82
|
+
const text = messageText(msg.content);
|
|
83
|
+
if (!text || !allTermsMatch(text, terms))
|
|
84
|
+
continue;
|
|
85
|
+
hits.push({
|
|
86
|
+
session_id: sessionId,
|
|
87
|
+
session_title: title,
|
|
88
|
+
role: msg.role ?? "unknown",
|
|
89
|
+
snippet: makeSnippet(text, terms[0]),
|
|
90
|
+
msg_index: i,
|
|
91
|
+
created_at: createdAt,
|
|
92
|
+
});
|
|
93
|
+
if (hits.length >= limit)
|
|
94
|
+
return hits;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
return hits;
|
|
98
|
+
}
|
|
99
|
+
function splitTerms(query) {
|
|
100
|
+
const out = [];
|
|
101
|
+
let cur = "";
|
|
102
|
+
let inQuote = false;
|
|
103
|
+
for (const ch of query) {
|
|
104
|
+
if (ch === '"') {
|
|
105
|
+
inQuote = !inQuote;
|
|
106
|
+
continue;
|
|
107
|
+
}
|
|
108
|
+
if (!inQuote && /\s/.test(ch)) {
|
|
109
|
+
if (cur) {
|
|
110
|
+
out.push(cur.toLowerCase());
|
|
111
|
+
cur = "";
|
|
112
|
+
}
|
|
113
|
+
continue;
|
|
114
|
+
}
|
|
115
|
+
cur += ch;
|
|
116
|
+
}
|
|
117
|
+
if (cur)
|
|
118
|
+
out.push(cur.toLowerCase());
|
|
119
|
+
return out;
|
|
120
|
+
}
|
|
121
|
+
function messageText(content) {
|
|
122
|
+
if (typeof content === "string")
|
|
123
|
+
return content;
|
|
124
|
+
if (!Array.isArray(content))
|
|
125
|
+
return "";
|
|
126
|
+
const parts = [];
|
|
127
|
+
for (const block of content) {
|
|
128
|
+
if (typeof block === "string") {
|
|
129
|
+
parts.push(block);
|
|
130
|
+
continue;
|
|
131
|
+
}
|
|
132
|
+
if (block && typeof block === "object") {
|
|
133
|
+
const b = block;
|
|
134
|
+
if (typeof b.text === "string")
|
|
135
|
+
parts.push(b.text);
|
|
136
|
+
else if (typeof b.content === "string")
|
|
137
|
+
parts.push(b.content);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
return parts.join("\n");
|
|
141
|
+
}
|
|
142
|
+
function allTermsMatch(text, terms) {
|
|
143
|
+
const lower = text.toLowerCase();
|
|
144
|
+
return terms.every((t) => lower.includes(t));
|
|
145
|
+
}
|
|
146
|
+
function makeSnippet(text, firstTerm) {
|
|
147
|
+
const lower = text.toLowerCase();
|
|
148
|
+
const idx = lower.indexOf(firstTerm.toLowerCase());
|
|
149
|
+
if (idx < 0) {
|
|
150
|
+
return text.length <= SNIPPET_MAX ? text : text.slice(0, SNIPPET_MAX) + "...";
|
|
151
|
+
}
|
|
152
|
+
const start = Math.max(0, idx - 60);
|
|
153
|
+
const end = Math.min(text.length, idx + firstTerm.length + 120);
|
|
154
|
+
let snip = text.slice(start, end);
|
|
155
|
+
if (start > 0)
|
|
156
|
+
snip = "..." + snip;
|
|
157
|
+
if (end < text.length)
|
|
158
|
+
snip += "...";
|
|
159
|
+
return snip;
|
|
160
|
+
}
|
|
161
|
+
//# sourceMappingURL=sessionSearch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sessionSearch.js","sourceRoot":"","sources":["../../src/fallback/sessionSearch.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,SAAS,CAAC;AAC7B,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,gBAAgB,EAAqB,MAAM,mBAAmB,CAAC;AAYxE,IAAI,WAAW,GAAwB,IAAI,CAAC;AAC5C,IAAI,YAAY,GAAkB,IAAI,CAAC;AAEvC;;;GAGG;AACH,SAAS,eAAe,CAAC,MAAc;IACrC,IAAI,WAAW,IAAI,YAAY,KAAK,MAAM;QAAE,OAAO,WAAW,CAAC;IAC/D,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC;QAAE,OAAO,IAAI,CAAC;IAC5C,WAAW,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;IACvC,YAAY,GAAG,MAAM,CAAC;IACtB,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,+BAA+B;AAC/B,MAAM,UAAU,oBAAoB,CAAC,WAAmB;IACtD,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC;AACvE,CAAC;AAcD,MAAM,WAAW,GAAG,GAAG,CAAC;AAExB;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,WAAmB,EACnB,KAAa,EACb,KAAa;IAEb,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE;QAAE,OAAO,EAAE,CAAC;IACnC,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IACvB,IAAI,CAAC,CAAC;QAAE,OAAO,EAAE,CAAC;IAClB,IAAI,KAAK,IAAI,CAAC;QAAE,KAAK,GAAG,EAAE,CAAC;IAE3B,MAAM,MAAM,GAAG,oBAAoB,CAAC,WAAW,CAAC,CAAC;IACjD,MAAM,GAAG,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;IACpC,IAAI,GAAG,EAAE,CAAC;QACR,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QACrC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,OAAO,CAAC;IACzC,CAAC;IAED,MAAM,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;IAC5B,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAElC,IAAI,OAAiB,CAAC;IACtB,IAAI,CAAC;QACH,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IAC1C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,IAAI,GAAuB,EAAE,CAAC;IACpC,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;QAC3B,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;YAAE,SAAS;QACtC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;QAC9C,IAAI,EAAE,CAAC;QACP,IAAI,CAAC;YACH,EAAE,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC/B,CAAC;QAAC,MAAM,CAAC;YACP,SAAS;QACX,CAAC;QACD,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE;YAAE,SAAS;QAE3B,IAAI,OAAsB,CAAC;QAC3B,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YAChD,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAkB,CAAC;QAC7C,CAAC;QAAC,MAAM,CAAC;YACP,SAAS;QACX,CAAC;QAED,MAAM,SAAS,GAAG,OAAO,CAAC,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC7D,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC;QAClC,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,IAAI,EAAE,CAAC;QAE3C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YACzD,MAAM,GAAG,GAAG,OAAO,CAAC,QAAS,CAAC,CAAC,CAAE,CAAC;YAClC,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACtC,IAAI,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,KAAK,CAAC;gBAAE,SAAS;YACnD,IAAI,CAAC,IAAI,CAAC;gBACR,UAAU,EAAE,SAAS;gBACrB,aAAa,EAAE,KAAK;gBACpB,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,SAAS;gBAC3B,OAAO,EAAE,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAE,CAAC;gBACrC,SAAS,EAAE,CAAC;gBACZ,UAAU,EAAE,SAAS;aACtB,CAAC,CAAC;YACH,IAAI,IAAI,CAAC,MAAM,IAAI,KAAK;gBAAE,OAAO,IAAI,CAAC;QACxC,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,UAAU,CAAC,KAAa;IAC/B,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,IAAI,GAAG,GAAG,EAAE,CAAC;IACb,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,KAAK,MAAM,EAAE,IAAI,KAAK,EAAE,CAAC;QACvB,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;YACf,OAAO,GAAG,CAAC,OAAO,CAAC;YACnB,SAAS;QACX,CAAC;QACD,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;YAC9B,IAAI,GAAG,EAAE,CAAC;gBACR,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;gBAC5B,GAAG,GAAG,EAAE,CAAC;YACX,CAAC;YACD,SAAS;QACX,CAAC;QACD,GAAG,IAAI,EAAE,CAAC;IACZ,CAAC;IACD,IAAI,GAAG;QAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;IACrC,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,WAAW,CAAC,OAAgB;IACnC,IAAI,OAAO,OAAO,KAAK,QAAQ;QAAE,OAAO,OAAO,CAAC;IAChD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;QAAE,OAAO,EAAE,CAAC;IACvC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAClB,SAAS;QACX,CAAC;QACD,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YACvC,MAAM,CAAC,GAAG,KAAgC,CAAC;YAC3C,IAAI,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ;gBAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;iBAC9C,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ;gBAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QAChE,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,SAAS,aAAa,CAAC,IAAY,EAAE,KAAe;IAClD,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IACjC,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/C,CAAC;AAED,SAAS,WAAW,CAAC,IAAY,EAAE,SAAiB;IAClD,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IACjC,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC;IACnD,IAAI,GAAG,GAAG,CAAC,EAAE,CAAC;QACZ,OAAO,IAAI,CAAC,MAAM,IAAI,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,WAAW,CAAC,GAAG,KAAK,CAAC;IAChF,CAAC;IACD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,EAAE,CAAC,CAAC;IACpC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,SAAS,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC;IAChE,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAClC,IAAI,KAAK,GAAG,CAAC;QAAE,IAAI,GAAG,KAAK,GAAG,IAAI,CAAC;IACnC,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM;QAAE,IAAI,IAAI,KAAK,CAAC;IACrC,OAAO,IAAI,CAAC;AACd,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export type { ErrorObject, FallbackQuery, HealthPayload, HopRecord, MemoryBlock, MemoryCandidateGroup, MemoryQuerier, MemoryRecallArgs, QueryCandidate, QueryIntent, QueryMode, QueryRequest, ReloadResponse, ResponseEnvelope, ServiceStatus, ToolResult, Warning, } from "./types.js";
|
|
2
|
+
export { defaultMemoryConfig, normalizeMemoryConfig, type MemoryConfig, type MemoryProvider, } from "./config.js";
|
|
3
|
+
export { defaultBundleRoot, defaultPiHome, defaultSessionsDir, defaultSocketPath, expandPath, } from "./paths.js";
|
|
4
|
+
export { classifyHTTP, classifyTransportError, ErrTransport, type ErrorClass, } from "./errclass.js";
|
|
5
|
+
export { SidecarClient } from "./sidecar/client.js";
|
|
6
|
+
export { currentBundleReadable, readCurrentManifest, type BundleManifest, } from "./sidecar/bundle.js";
|
|
7
|
+
export { installBundle, retainBundles, validateManifestPath, versionInRange, type InstallBundleOptions, type InstallBundleResult, } from "./bundle/install.js";
|
|
8
|
+
export { createFallbackQuery, memoryMdSnippet, sessionKeywordSearch, type FallbackOptions, type SessionSearchHit, } from "./fallback/index.js";
|
|
9
|
+
export { SidecarProcess } from "./sidecar/process.js";
|
|
10
|
+
export { MemoryService, type MemoryServiceStatus, type QueryBatchResult, } from "./service.js";
|
|
11
|
+
export { COMPILE_MEMORY_INTENTS_PARAMETERS, MEMORY_HELPER_TOOL_NAME, cleanMemoryAnchor, defaultDirectMemoryIntent, detectExactMemoryIntents, detectMemoryIntents, looksLikeTaskText, looksMemoryRelevant, sanitizeMemoryIntents, type CompileMemoryIntentsResult, type DetectIntentsOptions, type MemoryHelperLLM, } from "./preflight/detectIntents.js";
|
|
12
|
+
export { PRIVATE_MEMORY_BODY_BYTE_CAP, renderFallbackPrivateMemory, renderPrivateMemoryContext, sanitizeUserBlock, truncatePrivateMemoryBody, type PreflightQueryResult, } from "./preflight/render.js";
|
|
13
|
+
export { injectPrivateMemoryContext, stripPrivateMemory, } from "./preflight/strip.js";
|
|
14
|
+
export { MEMORY_PREFLIGHT_QUERY_TIMEOUT_MS, createBeforeTurnHook, runMemoryPreflight, type BeforeTurnHook, type BeforeTurnInput, type MemoryPreflightOptions, type MemoryPreflightResult, } from "./preflight/hook.js";
|
|
15
|
+
export { createMemoryRecallTool, createStubFallback, MemoryRecallTool, MEMORY_RECALL_DESCRIPTION, MEMORY_RECALL_NAME, MEMORY_RECALL_PARAMETERS, } from "./tools/memoryRecall.js";
|
|
16
|
+
export { appendToMemoryMd, createMemoryAppendTool, MemoryAppendTool, MEMORY_APPEND_DESCRIPTION, MEMORY_APPEND_NAME, MEMORY_APPEND_PARAMETERS, } from "./tools/memoryAppend.js";
|
|
17
|
+
export { default as piMemoryExtension, getSharedMemoryService, type PiAgentTool, type PiExtensionAPI, } from "./extension.js";
|
|
18
|
+
export { createMemoryHelperLLM, createPiLLMClient, createStandaloneLLMClient, DEFAULT_HELPER_MODEL, DEFAULT_HELPER_PROVIDER, parseModelSpec, resolveMemoryHelperLLM, } from "./adapters/piComplete.js";
|
|
19
|
+
export { trainBundle, loadSessions, extractFacts, extractFactsFromSessions, resolveEntities, buildBundle, readMarker, writeMarker, loadExistingBundle, deltaMerge, RELATION_CATALOG, ALL_RELATIONS, type TrainBundleConfig, type TrainBundleResult, type LoadedSession, type SessionTurn, type SessionLoaderOptions, type ExtractedEntity, type ExtractedRelation, type ExtractedEvent, type ExtractionResult, type EntityType, type LLMFactExtractor, type ExtractFactsOptions, type ResolvedEntity, type ResolvedRelation, type ResolvedGraph, type BundleData, type BuildBundleOptions, type BuildBundleResult, type ExistingBundle, type DeltaOp, type DeltaLogEntry, type DeltaLog, type MergeResult, } from "./trainer/index.js";
|
|
20
|
+
export { createLLMFactExtractor, type LLMClient, type LLMExtractorOptions, } from "./trainer/llmExtractor.js";
|
|
21
|
+
export { createTrainScheduler, parseInterval, type SchedulerConfig, type TrainScheduler, type SchedulerLog, type SchedulerLogger, } from "./trainer/scheduler.js";
|
|
22
|
+
export { openSessionIndex, type SessionIndex, type SqliteDatabase, } from "./fallback/sessionIndex.js";
|
|
23
|
+
export { defaultSessionDbPath } from "./fallback/sessionSearch.js";
|
|
24
|
+
export { rerankWithLLM, type RerankOptions, type RankedResult, } from "./fallback/llmRerank.js";
|
|
25
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export { defaultMemoryConfig, normalizeMemoryConfig, } from "./config.js";
|
|
2
|
+
export { defaultBundleRoot, defaultPiHome, defaultSessionsDir, defaultSocketPath, expandPath, } from "./paths.js";
|
|
3
|
+
export { classifyHTTP, classifyTransportError, ErrTransport, } from "./errclass.js";
|
|
4
|
+
export { SidecarClient } from "./sidecar/client.js";
|
|
5
|
+
export { currentBundleReadable, readCurrentManifest, } from "./sidecar/bundle.js";
|
|
6
|
+
export { installBundle, retainBundles, validateManifestPath, versionInRange, } from "./bundle/install.js";
|
|
7
|
+
export { createFallbackQuery, memoryMdSnippet, sessionKeywordSearch, } from "./fallback/index.js";
|
|
8
|
+
export { SidecarProcess } from "./sidecar/process.js";
|
|
9
|
+
export { MemoryService, } from "./service.js";
|
|
10
|
+
export { COMPILE_MEMORY_INTENTS_PARAMETERS, MEMORY_HELPER_TOOL_NAME, cleanMemoryAnchor, defaultDirectMemoryIntent, detectExactMemoryIntents, detectMemoryIntents, looksLikeTaskText, looksMemoryRelevant, sanitizeMemoryIntents, } from "./preflight/detectIntents.js";
|
|
11
|
+
export { PRIVATE_MEMORY_BODY_BYTE_CAP, renderFallbackPrivateMemory, renderPrivateMemoryContext, sanitizeUserBlock, truncatePrivateMemoryBody, } from "./preflight/render.js";
|
|
12
|
+
export { injectPrivateMemoryContext, stripPrivateMemory, } from "./preflight/strip.js";
|
|
13
|
+
export { MEMORY_PREFLIGHT_QUERY_TIMEOUT_MS, createBeforeTurnHook, runMemoryPreflight, } from "./preflight/hook.js";
|
|
14
|
+
export { createMemoryRecallTool, createStubFallback, MemoryRecallTool, MEMORY_RECALL_DESCRIPTION, MEMORY_RECALL_NAME, MEMORY_RECALL_PARAMETERS, } from "./tools/memoryRecall.js";
|
|
15
|
+
export { appendToMemoryMd, createMemoryAppendTool, MemoryAppendTool, MEMORY_APPEND_DESCRIPTION, MEMORY_APPEND_NAME, MEMORY_APPEND_PARAMETERS, } from "./tools/memoryAppend.js";
|
|
16
|
+
export { default as piMemoryExtension, getSharedMemoryService, } from "./extension.js";
|
|
17
|
+
export { createMemoryHelperLLM, createPiLLMClient, createStandaloneLLMClient, DEFAULT_HELPER_MODEL, DEFAULT_HELPER_PROVIDER, parseModelSpec, resolveMemoryHelperLLM, } from "./adapters/piComplete.js";
|
|
18
|
+
export { trainBundle, loadSessions, extractFacts, extractFactsFromSessions, resolveEntities, buildBundle, readMarker, writeMarker, loadExistingBundle, deltaMerge, RELATION_CATALOG, ALL_RELATIONS, } from "./trainer/index.js";
|
|
19
|
+
export { createLLMFactExtractor, } from "./trainer/llmExtractor.js";
|
|
20
|
+
export { createTrainScheduler, parseInterval, } from "./trainer/scheduler.js";
|
|
21
|
+
export { openSessionIndex, } from "./fallback/sessionIndex.js";
|
|
22
|
+
export { defaultSessionDbPath } from "./fallback/sessionSearch.js";
|
|
23
|
+
export { rerankWithLLM, } from "./fallback/llmRerank.js";
|
|
24
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAoBA,OAAO,EACL,mBAAmB,EACnB,qBAAqB,GAGtB,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,iBAAiB,EACjB,aAAa,EACb,kBAAkB,EAClB,iBAAiB,EACjB,UAAU,GACX,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,YAAY,EACZ,sBAAsB,EACtB,YAAY,GAEb,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EACL,qBAAqB,EACrB,mBAAmB,GAEpB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,aAAa,EACb,aAAa,EACb,oBAAoB,EACpB,cAAc,GAGf,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,mBAAmB,EACnB,eAAe,EACf,oBAAoB,GAGrB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,OAAO,EACL,aAAa,GAGd,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,iCAAiC,EACjC,uBAAuB,EACvB,iBAAiB,EACjB,yBAAyB,EACzB,wBAAwB,EACxB,mBAAmB,EACnB,iBAAiB,EACjB,mBAAmB,EACnB,qBAAqB,GAItB,MAAM,8BAA8B,CAAC;AAEtC,OAAO,EACL,4BAA4B,EAC5B,2BAA2B,EAC3B,0BAA0B,EAC1B,iBAAiB,EACjB,yBAAyB,GAE1B,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,0BAA0B,EAC1B,kBAAkB,GACnB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,iCAAiC,EACjC,oBAAoB,EACpB,kBAAkB,GAKnB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,sBAAsB,EACtB,kBAAkB,EAClB,gBAAgB,EAChB,yBAAyB,EACzB,kBAAkB,EAClB,wBAAwB,GACzB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EACL,gBAAgB,EAChB,sBAAsB,EACtB,gBAAgB,EAChB,yBAAyB,EACzB,kBAAkB,EAClB,wBAAwB,GACzB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EACL,OAAO,IAAI,iBAAiB,EAC5B,sBAAsB,GAGvB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,qBAAqB,EACrB,iBAAiB,EACjB,yBAAyB,EACzB,oBAAoB,EACpB,uBAAuB,EACvB,cAAc,EACd,sBAAsB,GACvB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EACL,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,wBAAwB,EACxB,eAAe,EACf,WAAW,EACX,UAAU,EACV,WAAW,EACX,kBAAkB,EAClB,UAAU,EACV,gBAAgB,EAChB,aAAa,GAwBd,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,sBAAsB,GAGvB,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EACL,oBAAoB,EACpB,aAAa,GAKd,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EACL,gBAAgB,GAGjB,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAEnE,OAAO,EACL,aAAa,GAGd,MAAM,yBAAyB,CAAC"}
|
package/dist/paths.d.ts
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/** Expands a leading ~ to the user home directory. */
|
|
2
|
+
export declare function expandPath(p: string): string;
|
|
3
|
+
export declare function defaultPiHome(): string;
|
|
4
|
+
export declare function defaultBundleRoot(): string;
|
|
5
|
+
export declare function defaultSocketPath(): string;
|
|
6
|
+
export declare function defaultSessionsDir(): string;
|
|
7
|
+
//# sourceMappingURL=paths.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../src/paths.ts"],"names":[],"mappings":"AAGA,sDAAsD;AACtD,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAO5C;AAED,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AAED,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AAED,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C"}
|
package/dist/paths.js
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import os from "node:os";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
/** Expands a leading ~ to the user home directory. */
|
|
4
|
+
export function expandPath(p) {
|
|
5
|
+
if (!p)
|
|
6
|
+
return p;
|
|
7
|
+
if (p === "~")
|
|
8
|
+
return os.homedir();
|
|
9
|
+
if (p.startsWith("~/") || p.startsWith("~\\")) {
|
|
10
|
+
return path.join(os.homedir(), p.slice(2));
|
|
11
|
+
}
|
|
12
|
+
return p;
|
|
13
|
+
}
|
|
14
|
+
export function defaultPiHome() {
|
|
15
|
+
return path.join(os.homedir(), ".pi");
|
|
16
|
+
}
|
|
17
|
+
export function defaultBundleRoot() {
|
|
18
|
+
return path.join(defaultPiHome(), "memory");
|
|
19
|
+
}
|
|
20
|
+
export function defaultSocketPath() {
|
|
21
|
+
return path.join(defaultPiHome(), "memory.sock");
|
|
22
|
+
}
|
|
23
|
+
export function defaultSessionsDir() {
|
|
24
|
+
return path.join(defaultPiHome(), "sessions");
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=paths.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../src/paths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,sDAAsD;AACtD,MAAM,UAAU,UAAU,CAAC,CAAS;IAClC,IAAI,CAAC,CAAC;QAAE,OAAO,CAAC,CAAC;IACjB,IAAI,CAAC,KAAK,GAAG;QAAE,OAAO,EAAE,CAAC,OAAO,EAAE,CAAC;IACnC,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QAC9C,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7C,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAED,MAAM,UAAU,aAAa;IAC3B,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,KAAK,CAAC,CAAC;AACxC,CAAC;AAED,MAAM,UAAU,iBAAiB;IAC/B,OAAO,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,QAAQ,CAAC,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,iBAAiB;IAC/B,OAAO,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,aAAa,CAAC,CAAC;AACnD,CAAC;AAED,MAAM,UAAU,kBAAkB;IAChC,OAAO,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,UAAU,CAAC,CAAC;AAChD,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
|
|
2
|
+
import { MemoryService } from "./service.js";
|
|
3
|
+
export declare function getSharedMemoryService(): MemoryService | null;
|
|
4
|
+
export default function piMemoryExtension(pi: ExtensionAPI): void;
|
|
5
|
+
export { piMemoryExtension };
|
|
6
|
+
//# sourceMappingURL=pi-extension.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pi-extension.d.ts","sourceRoot":"","sources":["../src/pi-extension.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAoB,MAAM,iCAAiC,CAAC;AAgBtF,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AA4C7C,wBAAgB,sBAAsB,IAAI,aAAa,GAAG,IAAI,CAE7D;AA2CD,MAAM,CAAC,OAAO,UAAU,iBAAiB,CAAC,EAAE,EAAE,YAAY,GAAG,IAAI,CAqKhE;AAED,OAAO,EAAE,iBAAiB,EAAE,CAAC"}
|