@chendpoc/pi-memory 0.1.0 → 0.1.12
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 +156 -111
- package/dist/adapters/ollamaClient.d.ts +11 -0
- package/dist/adapters/ollamaClient.d.ts.map +1 -0
- package/dist/adapters/ollamaClient.js +122 -0
- package/dist/adapters/ollamaClient.js.map +1 -0
- package/dist/adapters/openaiCompatClient.d.ts +11 -0
- package/dist/adapters/openaiCompatClient.d.ts.map +1 -0
- package/dist/adapters/openaiCompatClient.js +118 -0
- package/dist/adapters/openaiCompatClient.js.map +1 -0
- package/dist/cli.js +2 -2
- package/dist/cli.js.map +1 -1
- package/dist/fallback/sessionIndex.d.ts.map +1 -1
- package/dist/fallback/sessionIndex.js +90 -25
- package/dist/fallback/sessionIndex.js.map +1 -1
- package/dist/fallback/sessionSearch.d.ts +1 -1
- package/dist/fallback/sessionSearch.d.ts.map +1 -1
- package/dist/fallback/sessionSearch.js +101 -28
- package/dist/fallback/sessionSearch.js.map +1 -1
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/local/graphQuery.d.ts +21 -0
- package/dist/local/graphQuery.d.ts.map +1 -0
- package/dist/local/graphQuery.js +170 -0
- package/dist/local/graphQuery.js.map +1 -0
- package/dist/paths.js +1 -1
- package/dist/paths.js.map +1 -1
- package/dist/pi-extension.d.ts.map +1 -1
- package/dist/pi-extension.js +57 -17
- package/dist/pi-extension.js.map +1 -1
- package/dist/service.d.ts +10 -10
- package/dist/service.d.ts.map +1 -1
- package/dist/service.js +72 -30
- package/dist/service.js.map +1 -1
- package/dist/settings.d.ts +38 -0
- package/dist/settings.d.ts.map +1 -0
- package/dist/settings.js +68 -0
- package/dist/settings.js.map +1 -0
- package/dist/sidecar/process.d.ts.map +1 -1
- package/dist/sidecar/process.js +16 -4
- package/dist/sidecar/process.js.map +1 -1
- package/dist/trainer/sessionLoader.d.ts +2 -2
- package/dist/trainer/sessionLoader.d.ts.map +1 -1
- package/dist/trainer/sessionLoader.js +115 -39
- package/dist/trainer/sessionLoader.js.map +1 -1
- package/package.json +8 -4
- package/src/adapters/ollamaClient.ts +179 -0
- package/src/adapters/openaiCompatClient.ts +155 -0
- package/src/cache/memoryCaches.ts +72 -0
- package/src/cli.ts +4 -3
- package/src/fallback/llmRerank.ts +8 -1
- package/src/fallback/sessionIndex.ts +78 -40
- package/src/fallback/sessionSearch.ts +107 -27
- package/src/index.ts +28 -0
- package/src/local/graphQuery.ts +252 -0
- package/src/paths.ts +1 -1
- package/src/pi-extension.ts +164 -36
- package/src/preflight/detectIntents.ts +6 -0
- package/src/preflight/hook.ts +68 -5
- package/src/preflight/render.ts +28 -3
- package/src/service.ts +133 -29
- package/src/settings.ts +126 -0
- package/src/sidecar/process.ts +19 -4
- package/src/tools/memoryRecall.ts +33 -9
- package/src/trainer/scheduler.ts +3 -0
- package/src/trainer/sessionLoader.ts +128 -42
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
export class LocalGraphQuerier {
|
|
4
|
+
bundleRoot;
|
|
5
|
+
entities = [];
|
|
6
|
+
edges = [];
|
|
7
|
+
events = [];
|
|
8
|
+
entityById = new Map();
|
|
9
|
+
entityByLabel = new Map();
|
|
10
|
+
loaded = false;
|
|
11
|
+
constructor(bundleRoot) {
|
|
12
|
+
this.bundleRoot = bundleRoot;
|
|
13
|
+
}
|
|
14
|
+
load() {
|
|
15
|
+
const graphPath = path.join(this.bundleRoot, "current", "graph.json");
|
|
16
|
+
try {
|
|
17
|
+
const raw = fs.readFileSync(graphPath, "utf8");
|
|
18
|
+
const data = JSON.parse(raw);
|
|
19
|
+
this.entities = data.entities ?? [];
|
|
20
|
+
this.edges = data.edges ?? [];
|
|
21
|
+
this.events = data.events ?? [];
|
|
22
|
+
this.entityById.clear();
|
|
23
|
+
this.entityByLabel.clear();
|
|
24
|
+
for (const e of this.entities) {
|
|
25
|
+
this.entityById.set(e.entity_id, e);
|
|
26
|
+
this.entityByLabel.set(e.label.toLowerCase(), e);
|
|
27
|
+
for (const alias of e.aliases) {
|
|
28
|
+
this.entityByLabel.set(alias.toLowerCase(), e);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
this.loaded = true;
|
|
32
|
+
return true;
|
|
33
|
+
}
|
|
34
|
+
catch {
|
|
35
|
+
return false;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
isLoaded() {
|
|
39
|
+
return this.loaded;
|
|
40
|
+
}
|
|
41
|
+
findEntity(mention) {
|
|
42
|
+
const key = mention.toLowerCase().trim();
|
|
43
|
+
return this.entityByLabel.get(key) ?? null;
|
|
44
|
+
}
|
|
45
|
+
findEntities(mentions) {
|
|
46
|
+
const found = [];
|
|
47
|
+
for (const m of mentions) {
|
|
48
|
+
const e = this.findEntity(m);
|
|
49
|
+
if (e)
|
|
50
|
+
found.push(e);
|
|
51
|
+
}
|
|
52
|
+
return found;
|
|
53
|
+
}
|
|
54
|
+
query(intent) {
|
|
55
|
+
if (!this.loaded) {
|
|
56
|
+
return { env: null, errorClass: "unavailable" };
|
|
57
|
+
}
|
|
58
|
+
const anchors = this.findEntities(intent.anchor_mentions);
|
|
59
|
+
if (anchors.length === 0) {
|
|
60
|
+
return {
|
|
61
|
+
env: this.makeEnvelope(intent, [], [], "no matching entities found"),
|
|
62
|
+
errorClass: "ok",
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
const limit = intent.result_limit && intent.result_limit > 0 ? intent.result_limit : 10;
|
|
66
|
+
const candidates = [];
|
|
67
|
+
const groups = [];
|
|
68
|
+
for (const anchor of anchors) {
|
|
69
|
+
const relatedEdges = this.edges.filter((e) => {
|
|
70
|
+
const matchesHead = e.head_entity_id === anchor.entity_id;
|
|
71
|
+
const matchesTail = e.tail_entity_id === anchor.entity_id;
|
|
72
|
+
if (!matchesHead && !matchesTail)
|
|
73
|
+
return false;
|
|
74
|
+
if (intent.relation_constraints?.length) {
|
|
75
|
+
return intent.relation_constraints.some((rc) => {
|
|
76
|
+
const clean = rc.replace(/\^-1$/, "").replace(/^\^/, "");
|
|
77
|
+
return e.relation === clean;
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
return true;
|
|
81
|
+
});
|
|
82
|
+
for (const edge of relatedEdges) {
|
|
83
|
+
if (candidates.length >= limit)
|
|
84
|
+
break;
|
|
85
|
+
const isHead = edge.head_entity_id === anchor.entity_id;
|
|
86
|
+
const otherId = isHead ? edge.tail_entity_id : edge.head_entity_id;
|
|
87
|
+
const other = this.entityById.get(otherId);
|
|
88
|
+
if (!other)
|
|
89
|
+
continue;
|
|
90
|
+
if (intent.candidate_type) {
|
|
91
|
+
if (other.type.toLowerCase() !== intent.candidate_type.toLowerCase())
|
|
92
|
+
continue;
|
|
93
|
+
}
|
|
94
|
+
const score = other.mention_count + (other.distinct_session_count * 2);
|
|
95
|
+
candidates.push({
|
|
96
|
+
value: other.label,
|
|
97
|
+
score,
|
|
98
|
+
evidence: edge.evidence.slice(0, 200),
|
|
99
|
+
supporting_event_ids: edge.supporting_event_ids,
|
|
100
|
+
entity_id: other.entity_id,
|
|
101
|
+
scope: `via_${anchor.label}`,
|
|
102
|
+
support_count: other.mention_count,
|
|
103
|
+
distinct_session_count: other.distinct_session_count,
|
|
104
|
+
observed_path: [{
|
|
105
|
+
from_entity_id: anchor.entity_id,
|
|
106
|
+
from_label: anchor.label,
|
|
107
|
+
relation: edge.relation,
|
|
108
|
+
direction: isHead ? "forward" : "inverse",
|
|
109
|
+
to_entity_id: other.entity_id,
|
|
110
|
+
to_label: other.label,
|
|
111
|
+
supporting_event_ids: edge.supporting_event_ids,
|
|
112
|
+
}],
|
|
113
|
+
path_collision_count: 0,
|
|
114
|
+
});
|
|
115
|
+
groups.push({
|
|
116
|
+
value: other.label,
|
|
117
|
+
score,
|
|
118
|
+
evidence: edge.evidence.slice(0, 200),
|
|
119
|
+
support_count: other.mention_count,
|
|
120
|
+
supporting_event_ids: edge.supporting_event_ids,
|
|
121
|
+
entity_ids: [other.entity_id],
|
|
122
|
+
scopes: [`via_${anchor.label}`],
|
|
123
|
+
via_relations: [edge.relation],
|
|
124
|
+
via_anchor_entity_ids: [anchor.entity_id],
|
|
125
|
+
observed_path: [{
|
|
126
|
+
from_entity_id: anchor.entity_id,
|
|
127
|
+
from_label: anchor.label,
|
|
128
|
+
relation: edge.relation,
|
|
129
|
+
direction: isHead ? "forward" : "inverse",
|
|
130
|
+
to_entity_id: other.entity_id,
|
|
131
|
+
to_label: other.label,
|
|
132
|
+
supporting_event_ids: edge.supporting_event_ids,
|
|
133
|
+
}],
|
|
134
|
+
path_collision_count: 0,
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
candidates.sort((a, b) => b.score - a.score);
|
|
139
|
+
groups.sort((a, b) => b.score - a.score);
|
|
140
|
+
return {
|
|
141
|
+
env: this.makeEnvelope(intent, candidates.slice(0, limit), groups.slice(0, limit)),
|
|
142
|
+
errorClass: "ok",
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
makeEnvelope(intent, candidates, groups, noDataReason) {
|
|
146
|
+
const manifestPath = path.join(this.bundleRoot, "current", "manifest.json");
|
|
147
|
+
let bundleVersion;
|
|
148
|
+
try {
|
|
149
|
+
const m = JSON.parse(fs.readFileSync(manifestPath, "utf8"));
|
|
150
|
+
bundleVersion = m.bundle_version;
|
|
151
|
+
}
|
|
152
|
+
catch { /* ok */ }
|
|
153
|
+
const memoryBlock = {
|
|
154
|
+
groups,
|
|
155
|
+
notes: [],
|
|
156
|
+
...(noDataReason ? { no_data_reason: noDataReason } : {}),
|
|
157
|
+
};
|
|
158
|
+
return {
|
|
159
|
+
protocol_version: 1,
|
|
160
|
+
bundle_version: bundleVersion,
|
|
161
|
+
request_id: `local-${Date.now()}`,
|
|
162
|
+
candidates,
|
|
163
|
+
memory_block: memoryBlock,
|
|
164
|
+
warnings: [],
|
|
165
|
+
reason: candidates.length > 0 ? "ok" : "no_data",
|
|
166
|
+
latency_ms: 0,
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
//# sourceMappingURL=graphQuery.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graphQuery.js","sourceRoot":"","sources":["../../src/local/graphQuery.ts"],"names":[],"mappings":"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"}
|
package/dist/paths.js
CHANGED
|
@@ -21,6 +21,6 @@ export function defaultSocketPath() {
|
|
|
21
21
|
return path.join(defaultPiHome(), "memory.sock");
|
|
22
22
|
}
|
|
23
23
|
export function defaultSessionsDir() {
|
|
24
|
-
return path.join(defaultPiHome(), "sessions");
|
|
24
|
+
return path.join(defaultPiHome(), "agent", "sessions");
|
|
25
25
|
}
|
|
26
26
|
//# sourceMappingURL=paths.js.map
|
package/dist/paths.js.map
CHANGED
|
@@ -1 +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;
|
|
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,OAAO,EAAE,UAAU,CAAC,CAAC;AACzD,CAAC"}
|
|
@@ -1 +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;
|
|
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;AAgCtF,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AA+C7C,wBAAgB,sBAAsB,IAAI,aAAa,GAAG,IAAI,CAE7D;AA6ED,MAAM,CAAC,OAAO,UAAU,iBAAiB,CAAC,EAAE,EAAE,YAAY,GAAG,IAAI,CA4KhE;AAED,OAAO,EAAE,iBAAiB,EAAE,CAAC"}
|
package/dist/pi-extension.js
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import { StringEnum } from "@earendil-works/pi-ai";
|
|
2
2
|
import { truncateHead } from "@earendil-works/pi-coding-agent";
|
|
3
3
|
import { Type } from "typebox";
|
|
4
|
+
import { createOllamaLLMClient, createOllamaMemoryHelper, ollamaHealthCheck, } from "./adapters/ollamaClient.js";
|
|
5
|
+
import { createOpenAICompatLLMClient, createOpenAICompatMemoryHelper, openaiCompatHealthCheck, } from "./adapters/openaiCompatClient.js";
|
|
4
6
|
import { createPiLLMClient, DEFAULT_HELPER_MODEL, DEFAULT_HELPER_PROVIDER, resolveMemoryHelperLLM, } from "./adapters/piComplete.js";
|
|
5
|
-
import {
|
|
7
|
+
import { loadMemorySettings, resolveHelperModelSpec, } from "./settings.js";
|
|
6
8
|
import { createFallbackQuery } from "./fallback/index.js";
|
|
7
9
|
import { runMemoryPreflight } from "./preflight/hook.js";
|
|
8
10
|
import { injectPrivateMemoryContext } from "./preflight/strip.js";
|
|
@@ -27,15 +29,41 @@ const RECALL_MAX_LINES = 200;
|
|
|
27
29
|
const RECALL_MAX_BYTES = 32_000;
|
|
28
30
|
let sharedService = null;
|
|
29
31
|
let sessionCfg = null;
|
|
32
|
+
let settingsHelperModel;
|
|
33
|
+
let settingsOllama = null;
|
|
34
|
+
let settingsVllm = null;
|
|
30
35
|
let sharedHelper = null;
|
|
31
36
|
let sharedLLMClient = null;
|
|
32
37
|
let preflightCache = null;
|
|
33
38
|
export function getSharedMemoryService() {
|
|
34
39
|
return sharedService;
|
|
35
40
|
}
|
|
41
|
+
function getHelperModelSpec(pi) {
|
|
42
|
+
return resolveHelperModelSpec(pi.getFlag("memory-helper-model"), settingsHelperModel);
|
|
43
|
+
}
|
|
44
|
+
function isOllamaModel(spec) {
|
|
45
|
+
return !!spec?.startsWith("ollama/");
|
|
46
|
+
}
|
|
36
47
|
async function refreshMemoryHelper(ctx, pi) {
|
|
37
|
-
|
|
38
|
-
|
|
48
|
+
const helperModel = getHelperModelSpec(pi);
|
|
49
|
+
if (settingsVllm) {
|
|
50
|
+
const vllmOk = await openaiCompatHealthCheck(settingsVllm.baseUrl);
|
|
51
|
+
if (vllmOk) {
|
|
52
|
+
sharedHelper = createOpenAICompatMemoryHelper(settingsVllm);
|
|
53
|
+
sharedLLMClient = createOpenAICompatLLMClient(settingsVllm);
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
if ((isOllamaModel(helperModel) || settingsOllama) && settingsOllama) {
|
|
58
|
+
const ollamaOk = await ollamaHealthCheck(settingsOllama.baseUrl);
|
|
59
|
+
if (ollamaOk) {
|
|
60
|
+
sharedHelper = createOllamaMemoryHelper(settingsOllama);
|
|
61
|
+
sharedLLMClient = createOllamaLLMClient(settingsOllama);
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
sharedHelper = await resolveMemoryHelperLLM(ctx, helperModel);
|
|
66
|
+
sharedLLMClient = createPiLLMClient(ctx, helperModel);
|
|
39
67
|
}
|
|
40
68
|
function getRerankOpts() {
|
|
41
69
|
if (!sharedLLMClient)
|
|
@@ -67,7 +95,13 @@ function formatMemoryStatus(service) {
|
|
|
67
95
|
const snap = service.getStatus();
|
|
68
96
|
const lines = [
|
|
69
97
|
`status: ${snap.status}`,
|
|
98
|
+
snap.mode ? `mode: ${snap.mode}` : null,
|
|
70
99
|
snap.reason ? `reason: ${snap.reason}` : null,
|
|
100
|
+
sharedHelper
|
|
101
|
+
? `helper: ${settingsVllm ? `vllm/${settingsVllm.model}` : settingsOllama ? `ollama/${settingsOllama.model}` : (settingsHelperModel ?? "pi-ai")}`
|
|
102
|
+
: "helper: none (regex only)",
|
|
103
|
+
settingsVllm ? `vllm: ${settingsVllm.baseUrl} (${settingsVllm.model})` : null,
|
|
104
|
+
settingsOllama ? `ollama: ${settingsOllama.baseUrl} (${settingsOllama.model})` : null,
|
|
71
105
|
snap.health ? `health: ${JSON.stringify(snap.health)}` : null,
|
|
72
106
|
].filter(Boolean);
|
|
73
107
|
return lines.join("\n");
|
|
@@ -78,7 +112,11 @@ export default function piMemoryExtension(pi) {
|
|
|
78
112
|
type: "string",
|
|
79
113
|
});
|
|
80
114
|
pi.on("session_start", async (_event, ctx) => {
|
|
81
|
-
const
|
|
115
|
+
const loaded = loadMemorySettings();
|
|
116
|
+
const cfg = loaded.config;
|
|
117
|
+
settingsHelperModel = loaded.helperModel;
|
|
118
|
+
settingsOllama = loaded.ollama;
|
|
119
|
+
settingsVllm = loaded.vllm;
|
|
82
120
|
sessionCfg = cfg;
|
|
83
121
|
preflightCache = null;
|
|
84
122
|
sharedHelper = null;
|
|
@@ -86,19 +124,16 @@ export default function piMemoryExtension(pi) {
|
|
|
86
124
|
return;
|
|
87
125
|
const service = new MemoryService(cfg);
|
|
88
126
|
sharedService = service;
|
|
127
|
+
await service.start();
|
|
128
|
+
service.startSessionIndex();
|
|
129
|
+
if (cfg.trainer.auto_interval) {
|
|
130
|
+
service.startAutoTrainer();
|
|
131
|
+
}
|
|
89
132
|
try {
|
|
90
|
-
await service.start();
|
|
91
|
-
service.startSessionIndex();
|
|
92
|
-
if (cfg.trainer.auto_interval) {
|
|
93
|
-
service.startAutoTrainer();
|
|
94
|
-
}
|
|
95
133
|
await refreshMemoryHelper(ctx, pi);
|
|
96
134
|
}
|
|
97
|
-
catch
|
|
98
|
-
|
|
99
|
-
if (ctx.hasUI) {
|
|
100
|
-
ctx.ui.notify(`pi-memory: sidecar start failed (${message}) — fallback mode active`, "warning");
|
|
101
|
-
}
|
|
135
|
+
catch {
|
|
136
|
+
/* helper unavailable — regex-only preflight */
|
|
102
137
|
}
|
|
103
138
|
});
|
|
104
139
|
pi.on("session_shutdown", async () => {
|
|
@@ -107,6 +142,9 @@ export default function piMemoryExtension(pi) {
|
|
|
107
142
|
sharedService = null;
|
|
108
143
|
}
|
|
109
144
|
sessionCfg = null;
|
|
145
|
+
settingsHelperModel = undefined;
|
|
146
|
+
settingsOllama = null;
|
|
147
|
+
settingsVllm = null;
|
|
110
148
|
sharedHelper = null;
|
|
111
149
|
sharedLLMClient = null;
|
|
112
150
|
preflightCache = null;
|
|
@@ -117,9 +155,11 @@ export default function piMemoryExtension(pi) {
|
|
|
117
155
|
pi.on("agent_start", () => {
|
|
118
156
|
preflightCache = null;
|
|
119
157
|
});
|
|
158
|
+
const initialSettings = loadMemorySettings();
|
|
159
|
+
settingsHelperModel = initialSettings.helperModel;
|
|
120
160
|
const fallback = createFallbackQuery({
|
|
121
|
-
sessionsDir:
|
|
122
|
-
memoryMdPaths:
|
|
161
|
+
sessionsDir: initialSettings.config.sessionsDir,
|
|
162
|
+
memoryMdPaths: initialSettings.config.memoryMdPaths,
|
|
123
163
|
});
|
|
124
164
|
pi.registerCommand("memory", {
|
|
125
165
|
description: "Show pi-memory sidecar status and bundle info",
|
|
@@ -165,7 +205,7 @@ export default function piMemoryExtension(pi) {
|
|
|
165
205
|
};
|
|
166
206
|
},
|
|
167
207
|
});
|
|
168
|
-
const memoryMdPath =
|
|
208
|
+
const memoryMdPath = initialSettings.config.memoryMdPaths[0];
|
|
169
209
|
if (memoryMdPath) {
|
|
170
210
|
const appendTool = createMemoryAppendTool(memoryMdPath);
|
|
171
211
|
pi.registerTool({
|
package/dist/pi-extension.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pi-extension.js","sourceRoot":"","sources":["../src/pi-extension.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAEnD,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAC/D,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAE/B,OAAO,EACL,iBAAiB,EACjB,oBAAoB,EACpB,uBAAuB,EACvB,sBAAsB,GACvB,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"pi-extension.js","sourceRoot":"","sources":["../src/pi-extension.ts"],"names":[],"mappings":"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"}
|
package/dist/service.d.ts
CHANGED
|
@@ -7,6 +7,7 @@ import type { HealthPayload, QueryIntent, ResponseEnvelope, ServiceStatus } from
|
|
|
7
7
|
export interface MemoryServiceStatus {
|
|
8
8
|
status: ServiceStatus;
|
|
9
9
|
reason?: string;
|
|
10
|
+
mode?: "sidecar" | "local_graph";
|
|
10
11
|
health?: HealthPayload | null;
|
|
11
12
|
}
|
|
12
13
|
export interface QueryBatchResult {
|
|
@@ -15,15 +16,20 @@ export interface QueryBatchResult {
|
|
|
15
16
|
transportError?: Error;
|
|
16
17
|
}
|
|
17
18
|
/**
|
|
18
|
-
*
|
|
19
|
-
*
|
|
19
|
+
* Local memory service with two query backends:
|
|
20
|
+
* 1. tlm sidecar (Unix socket) — when tlm binary is available
|
|
21
|
+
* 2. LocalGraphQuerier — direct graph.json query when tlm is missing
|
|
22
|
+
*
|
|
23
|
+
* Both require a bundle at bundleRoot/current.
|
|
20
24
|
*/
|
|
21
25
|
export declare class MemoryService {
|
|
22
26
|
private cfg;
|
|
23
27
|
private serviceStatus;
|
|
24
28
|
private reason;
|
|
29
|
+
private mode;
|
|
25
30
|
private process;
|
|
26
31
|
private client;
|
|
32
|
+
private localQuerier;
|
|
27
33
|
private abort;
|
|
28
34
|
private scheduler;
|
|
29
35
|
private sessionIndex;
|
|
@@ -33,15 +39,9 @@ export declare class MemoryService {
|
|
|
33
39
|
getStatus(): MemoryServiceStatus;
|
|
34
40
|
getClient(): SidecarClient | null;
|
|
35
41
|
start(): Promise<void>;
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
* Uses config.trainer.auto_interval.
|
|
39
|
-
*/
|
|
42
|
+
private trySidecar;
|
|
43
|
+
private tryLocalGraph;
|
|
40
44
|
startAutoTrainer(logger?: (log: SchedulerLog) => void): void;
|
|
41
|
-
/**
|
|
42
|
-
* Trigger incremental session index build in the background (non-blocking).
|
|
43
|
-
* Opens (or creates) the SQLite FTS5 DB at ~/.pi/memory/sessions.db.
|
|
44
|
-
*/
|
|
45
45
|
startSessionIndex(): void;
|
|
46
46
|
getSessionIndex(): SessionIndex | null;
|
|
47
47
|
stop(): Promise<void>;
|
package/dist/service.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAGhD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,OAAO,EAAoB,KAAK,YAAY,EAAE,MAAM,4BAA4B,CAAC;AACjF,OAAO,EAA6C,KAAK,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtG,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,KAAK,EACV,aAAa,EACb,WAAW,EACX,gBAAgB,EAChB,aAAa,EACd,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,aAAa,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,SAAS,GAAG,aAAa,CAAC;IACjC,MAAM,CAAC,EAAE,aAAa,GAAG,IAAI,CAAC;CAC/B;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,gBAAgB,GAAG,IAAI,CAAC;IAClC,UAAU,EAAE,UAAU,CAAC;IACvB,cAAc,CAAC,EAAE,KAAK,CAAC;CACxB;AAED;;;;;;GAMG;AACH,qBAAa,aAAa;IAWZ,OAAO,CAAC,GAAG;IAVvB,OAAO,CAAC,aAAa,CAA6B;IAClD,OAAO,CAAC,MAAM,CAAM;IACpB,OAAO,CAAC,IAAI,CAA0C;IACtD,OAAO,CAAC,OAAO,CAA+B;IAC9C,OAAO,CAAC,MAAM,CAA8B;IAC5C,OAAO,CAAC,YAAY,CAAkC;IACtD,OAAO,CAAC,KAAK,CAAgC;IAC7C,OAAO,CAAC,SAAS,CAA+B;IAChD,OAAO,CAAC,YAAY,CAA6B;gBAE7B,GAAG,EAAE,YAAY;IAErC,SAAS,IAAI,YAAY;IAIzB,MAAM,IAAI,aAAa;IAIvB,SAAS,IAAI,mBAAmB;IAQhC,SAAS,IAAI,aAAa,GAAG,IAAI;IAI3B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;YA6Bd,UAAU;IAyBxB,OAAO,CAAC,aAAa;IAUrB,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,YAAY,KAAK,IAAI,GAAG,IAAI;IAc5D,iBAAiB,IAAI,IAAI;IAczB,eAAe,IAAI,YAAY,GAAG,IAAI;IAIhC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAmBrB,UAAU,CACd,OAAO,EAAE,WAAW,EAAE,EACtB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAcxB,KAAK,CACT,MAAM,EAAE,WAAW,EACnB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC;QACT,GAAG,EAAE,gBAAgB,GAAG,IAAI,CAAC;QAC7B,UAAU,EAAE,UAAU,CAAC;QACvB,cAAc,CAAC,EAAE,KAAK,CAAC;KACxB,CAAC;IAoBI,MAAM,IAAI,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;CAmB9C"}
|
package/dist/service.js
CHANGED
|
@@ -1,18 +1,25 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
1
2
|
import path from "node:path";
|
|
3
|
+
import { LocalGraphQuerier } from "./local/graphQuery.js";
|
|
2
4
|
import { currentBundleReadable } from "./sidecar/bundle.js";
|
|
3
5
|
import { SidecarProcess } from "./sidecar/process.js";
|
|
4
6
|
import { openSessionIndex } from "./fallback/sessionIndex.js";
|
|
5
7
|
import { createTrainScheduler } from "./trainer/scheduler.js";
|
|
6
8
|
/**
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
+
* Local memory service with two query backends:
|
|
10
|
+
* 1. tlm sidecar (Unix socket) — when tlm binary is available
|
|
11
|
+
* 2. LocalGraphQuerier — direct graph.json query when tlm is missing
|
|
12
|
+
*
|
|
13
|
+
* Both require a bundle at bundleRoot/current.
|
|
9
14
|
*/
|
|
10
15
|
export class MemoryService {
|
|
11
16
|
cfg;
|
|
12
17
|
serviceStatus = "disabled";
|
|
13
18
|
reason = "";
|
|
19
|
+
mode = null;
|
|
14
20
|
process = null;
|
|
15
21
|
client = null;
|
|
22
|
+
localQuerier = null;
|
|
16
23
|
abort = null;
|
|
17
24
|
scheduler = null;
|
|
18
25
|
sessionIndex = null;
|
|
@@ -29,6 +36,7 @@ export class MemoryService {
|
|
|
29
36
|
return {
|
|
30
37
|
status: this.serviceStatus,
|
|
31
38
|
reason: this.reason || undefined,
|
|
39
|
+
mode: this.mode ?? undefined,
|
|
32
40
|
};
|
|
33
41
|
}
|
|
34
42
|
getClient() {
|
|
@@ -51,35 +59,48 @@ export class MemoryService {
|
|
|
51
59
|
}
|
|
52
60
|
this.serviceStatus = "initializing";
|
|
53
61
|
this.abort = new AbortController();
|
|
62
|
+
if (await this.trySidecar())
|
|
63
|
+
return;
|
|
64
|
+
if (this.tryLocalGraph())
|
|
65
|
+
return;
|
|
66
|
+
this.serviceStatus = "unavailable";
|
|
67
|
+
this.reason = "no_query_backend";
|
|
68
|
+
}
|
|
69
|
+
async trySidecar() {
|
|
54
70
|
this.process = new SidecarProcess(this.cfg);
|
|
55
71
|
try {
|
|
56
72
|
await this.process.resolveBinary();
|
|
57
73
|
}
|
|
58
74
|
catch {
|
|
59
|
-
this.
|
|
60
|
-
|
|
61
|
-
return;
|
|
75
|
+
this.process = null;
|
|
76
|
+
return false;
|
|
62
77
|
}
|
|
63
78
|
try {
|
|
64
79
|
await this.process.spawn();
|
|
65
80
|
await this.process.waitReady(this.abort.signal);
|
|
66
81
|
this.client = this.process.getClient();
|
|
67
82
|
this.serviceStatus = "ready";
|
|
83
|
+
this.mode = "sidecar";
|
|
68
84
|
this.reason = "";
|
|
85
|
+
return true;
|
|
69
86
|
}
|
|
70
|
-
catch
|
|
71
|
-
this.serviceStatus = "unavailable";
|
|
72
|
-
this.reason =
|
|
73
|
-
err instanceof Error ? err.message : "sidecar_startup_failed";
|
|
87
|
+
catch {
|
|
74
88
|
await this.process.stop();
|
|
75
89
|
this.process = null;
|
|
76
90
|
this.client = null;
|
|
91
|
+
return false;
|
|
77
92
|
}
|
|
78
93
|
}
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
94
|
+
tryLocalGraph() {
|
|
95
|
+
const querier = new LocalGraphQuerier(this.cfg.bundleRoot);
|
|
96
|
+
if (!querier.load())
|
|
97
|
+
return false;
|
|
98
|
+
this.localQuerier = querier;
|
|
99
|
+
this.serviceStatus = "ready";
|
|
100
|
+
this.mode = "local_graph";
|
|
101
|
+
this.reason = "";
|
|
102
|
+
return true;
|
|
103
|
+
}
|
|
83
104
|
startAutoTrainer(logger) {
|
|
84
105
|
this.scheduler?.stop();
|
|
85
106
|
this.scheduler = createTrainScheduler({
|
|
@@ -90,12 +111,15 @@ export class MemoryService {
|
|
|
90
111
|
},
|
|
91
112
|
}, logger);
|
|
92
113
|
}
|
|
93
|
-
/**
|
|
94
|
-
* Trigger incremental session index build in the background (non-blocking).
|
|
95
|
-
* Opens (or creates) the SQLite FTS5 DB at ~/.pi/memory/sessions.db.
|
|
96
|
-
*/
|
|
97
114
|
startSessionIndex() {
|
|
98
|
-
const
|
|
115
|
+
const dbDir = this.cfg.bundleRoot;
|
|
116
|
+
try {
|
|
117
|
+
fs.mkdirSync(dbDir, { recursive: true });
|
|
118
|
+
}
|
|
119
|
+
catch {
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
const dbPath = path.join(dbDir, "sessions.db");
|
|
99
123
|
const idx = openSessionIndex(dbPath);
|
|
100
124
|
if (!idx)
|
|
101
125
|
return;
|
|
@@ -114,6 +138,8 @@ export class MemoryService {
|
|
|
114
138
|
await this.process?.stop();
|
|
115
139
|
this.process = null;
|
|
116
140
|
this.client = null;
|
|
141
|
+
this.localQuerier = null;
|
|
142
|
+
this.mode = null;
|
|
117
143
|
if (this.cfg.provider === "disabled") {
|
|
118
144
|
this.serviceStatus = "disabled";
|
|
119
145
|
}
|
|
@@ -135,24 +161,40 @@ export class MemoryService {
|
|
|
135
161
|
}));
|
|
136
162
|
}
|
|
137
163
|
async query(intent, signal) {
|
|
138
|
-
if (this.serviceStatus !== "ready"
|
|
164
|
+
if (this.serviceStatus !== "ready") {
|
|
139
165
|
return { env: null, errorClass: "unavailable" };
|
|
140
166
|
}
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
167
|
+
if (this.client && this.mode === "sidecar") {
|
|
168
|
+
const timeout = AbortSignal.timeout(this.cfg.queryTimeoutMs);
|
|
169
|
+
const combined = signal
|
|
170
|
+
? AbortSignal.any([signal, timeout])
|
|
171
|
+
: timeout;
|
|
172
|
+
return this.client.query(intent, combined);
|
|
173
|
+
}
|
|
174
|
+
if (this.localQuerier && this.mode === "local_graph") {
|
|
175
|
+
return this.localQuerier.query(intent);
|
|
176
|
+
}
|
|
177
|
+
return { env: null, errorClass: "unavailable" };
|
|
146
178
|
}
|
|
147
179
|
async health() {
|
|
148
|
-
if (
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
180
|
+
if (this.client) {
|
|
181
|
+
try {
|
|
182
|
+
return await this.client.health();
|
|
183
|
+
}
|
|
184
|
+
catch {
|
|
185
|
+
return null;
|
|
186
|
+
}
|
|
152
187
|
}
|
|
153
|
-
|
|
154
|
-
return
|
|
188
|
+
if (this.localQuerier) {
|
|
189
|
+
return {
|
|
190
|
+
ready: true,
|
|
191
|
+
compatibility: "local_graph",
|
|
192
|
+
protocol_version: 1,
|
|
193
|
+
uptime_secs: 0,
|
|
194
|
+
status_message: `local graph query (${this.localQuerier.isLoaded() ? "loaded" : "not loaded"})`,
|
|
195
|
+
};
|
|
155
196
|
}
|
|
197
|
+
return null;
|
|
156
198
|
}
|
|
157
199
|
}
|
|
158
200
|
//# sourceMappingURL=service.js.map
|