@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.
Files changed (67) hide show
  1. package/README.md +156 -111
  2. package/dist/adapters/ollamaClient.d.ts +11 -0
  3. package/dist/adapters/ollamaClient.d.ts.map +1 -0
  4. package/dist/adapters/ollamaClient.js +122 -0
  5. package/dist/adapters/ollamaClient.js.map +1 -0
  6. package/dist/adapters/openaiCompatClient.d.ts +11 -0
  7. package/dist/adapters/openaiCompatClient.d.ts.map +1 -0
  8. package/dist/adapters/openaiCompatClient.js +118 -0
  9. package/dist/adapters/openaiCompatClient.js.map +1 -0
  10. package/dist/cli.js +2 -2
  11. package/dist/cli.js.map +1 -1
  12. package/dist/fallback/sessionIndex.d.ts.map +1 -1
  13. package/dist/fallback/sessionIndex.js +90 -25
  14. package/dist/fallback/sessionIndex.js.map +1 -1
  15. package/dist/fallback/sessionSearch.d.ts +1 -1
  16. package/dist/fallback/sessionSearch.d.ts.map +1 -1
  17. package/dist/fallback/sessionSearch.js +101 -28
  18. package/dist/fallback/sessionSearch.js.map +1 -1
  19. package/dist/index.d.ts +4 -0
  20. package/dist/index.d.ts.map +1 -1
  21. package/dist/index.js +4 -0
  22. package/dist/index.js.map +1 -1
  23. package/dist/local/graphQuery.d.ts +21 -0
  24. package/dist/local/graphQuery.d.ts.map +1 -0
  25. package/dist/local/graphQuery.js +170 -0
  26. package/dist/local/graphQuery.js.map +1 -0
  27. package/dist/paths.js +1 -1
  28. package/dist/paths.js.map +1 -1
  29. package/dist/pi-extension.d.ts.map +1 -1
  30. package/dist/pi-extension.js +57 -17
  31. package/dist/pi-extension.js.map +1 -1
  32. package/dist/service.d.ts +10 -10
  33. package/dist/service.d.ts.map +1 -1
  34. package/dist/service.js +72 -30
  35. package/dist/service.js.map +1 -1
  36. package/dist/settings.d.ts +38 -0
  37. package/dist/settings.d.ts.map +1 -0
  38. package/dist/settings.js +68 -0
  39. package/dist/settings.js.map +1 -0
  40. package/dist/sidecar/process.d.ts.map +1 -1
  41. package/dist/sidecar/process.js +16 -4
  42. package/dist/sidecar/process.js.map +1 -1
  43. package/dist/trainer/sessionLoader.d.ts +2 -2
  44. package/dist/trainer/sessionLoader.d.ts.map +1 -1
  45. package/dist/trainer/sessionLoader.js +115 -39
  46. package/dist/trainer/sessionLoader.js.map +1 -1
  47. package/package.json +8 -4
  48. package/src/adapters/ollamaClient.ts +179 -0
  49. package/src/adapters/openaiCompatClient.ts +155 -0
  50. package/src/cache/memoryCaches.ts +72 -0
  51. package/src/cli.ts +4 -3
  52. package/src/fallback/llmRerank.ts +8 -1
  53. package/src/fallback/sessionIndex.ts +78 -40
  54. package/src/fallback/sessionSearch.ts +107 -27
  55. package/src/index.ts +28 -0
  56. package/src/local/graphQuery.ts +252 -0
  57. package/src/paths.ts +1 -1
  58. package/src/pi-extension.ts +164 -36
  59. package/src/preflight/detectIntents.ts +6 -0
  60. package/src/preflight/hook.ts +68 -5
  61. package/src/preflight/render.ts +28 -3
  62. package/src/service.ts +133 -29
  63. package/src/settings.ts +126 -0
  64. package/src/sidecar/process.ts +19 -4
  65. package/src/tools/memoryRecall.ts +33 -9
  66. package/src/trainer/scheduler.ts +3 -0
  67. 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;AAChD,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;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"}
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"}
@@ -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 { defaultMemoryConfig } from "./config.js";
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
- sharedHelper = await resolveMemoryHelperLLM(ctx, pi.getFlag("memory-helper-model"));
38
- sharedLLMClient = createPiLLMClient(ctx, pi.getFlag("memory-helper-model"));
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 cfg = defaultMemoryConfig();
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 (err) {
98
- const message = err instanceof Error ? err.message : String(err);
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: defaultMemoryConfig().sessionsDir,
122
- memoryMdPaths: defaultMemoryConfig().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 = defaultMemoryConfig().memoryMdPaths[0];
208
+ const memoryMdPath = initialSettings.config.memoryMdPaths[0];
169
209
  if (memoryMdPath) {
170
210
  const appendTool = createMemoryAppendTool(memoryMdPath);
171
211
  pi.registerTool({
@@ -1 +1 @@
1
- {"version":3,"file":"pi-extension.js","sourceRoot":"","sources":["../src/pi-extension.ts"],"names":[],"mappings":"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"}
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,qBAAqB,EACrB,wBAAwB,EACxB,iBAAiB,GAElB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,2BAA2B,EAC3B,8BAA8B,EAC9B,uBAAuB,GAExB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EACL,iBAAiB,EACjB,oBAAoB,EACpB,uBAAuB,EACvB,sBAAsB,GACvB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EACL,kBAAkB,EAClB,sBAAsB,GACvB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAG1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE7C,OAAO,EACL,sBAAsB,EACtB,yBAAyB,EACzB,kBAAkB,EAClB,+BAA+B,EAC/B,4BAA4B,GAC7B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,sBAAsB,EACtB,yBAAyB,EACzB,kBAAkB,EAClB,+BAA+B,EAC/B,4BAA4B,GAC7B,MAAM,yBAAyB,CAAC;AAEjC,MAAM,kBAAkB,GAAG,IAAI,CAAC,MAAM,CAAC;IACrC,IAAI,EAAE,IAAI,CAAC,QAAQ,CACjB,UAAU,CAAC,CAAC,iBAAiB,EAAE,YAAY,EAAE,oBAAoB,CAAU,CAAC,CAC7E;IACD,eAAe,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;IAC1C,oBAAoB,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IAC9D,cAAc,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;IAC5C,YAAY,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IACtD,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,MAAM,EAAE,MAAM,CAAU,CAAC,CAAC;IACjE,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;IACzC,eAAe,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;IAC7C,YAAY,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;CAC3C,CAAC,CAAC;AAEH,MAAM,kBAAkB,GAAG,IAAI,CAAC,MAAM,CAAC;IACrC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,iDAAiD,EAAE,CAAC;CACzF,CAAC,CAAC;AAEH,MAAM,gBAAgB,GAAG,GAAG,CAAC;AAC7B,MAAM,gBAAgB,GAAG,MAAM,CAAC;AAEhC,IAAI,aAAa,GAAyB,IAAI,CAAC;AAC/C,IAAI,UAAU,GAAwB,IAAI,CAAC;AAC3C,IAAI,mBAAuC,CAAC;AAC5C,IAAI,cAAc,GAAwB,IAAI,CAAC;AAC/C,IAAI,YAAY,GAA8B,IAAI,CAAC;AACnD,IAAI,YAAY,GAA2B,IAAI,CAAC;AAChD,IAAI,eAAe,GAAqB,IAAI,CAAC;AAC7C,IAAI,cAAc,GAAwD,IAAI,CAAC;AAE/E,MAAM,UAAU,sBAAsB;IACpC,OAAO,aAAa,CAAC;AACvB,CAAC;AAED,SAAS,kBAAkB,CAAC,EAAgB;IAC1C,OAAO,sBAAsB,CAAC,EAAE,CAAC,OAAO,CAAC,qBAAqB,CAAC,EAAE,mBAAmB,CAAC,CAAC;AACxF,CAAC;AAED,SAAS,aAAa,CAAC,IAAwB;IAC7C,OAAO,CAAC,CAAC,IAAI,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC;AACvC,CAAC;AAED,KAAK,UAAU,mBAAmB,CAAC,GAAqB,EAAE,EAAgB;IACxE,MAAM,WAAW,GAAG,kBAAkB,CAAC,EAAE,CAAC,CAAC;IAE3C,IAAI,YAAY,EAAE,CAAC;QACjB,MAAM,MAAM,GAAG,MAAM,uBAAuB,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QACnE,IAAI,MAAM,EAAE,CAAC;YACX,YAAY,GAAG,8BAA8B,CAAC,YAAY,CAAC,CAAC;YAC5D,eAAe,GAAG,2BAA2B,CAAC,YAAY,CAAC,CAAC;YAC5D,OAAO;QACT,CAAC;IACH,CAAC;IAED,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,IAAI,cAAc,CAAC,IAAI,cAAc,EAAE,CAAC;QACrE,MAAM,QAAQ,GAAG,MAAM,iBAAiB,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QACjE,IAAI,QAAQ,EAAE,CAAC;YACb,YAAY,GAAG,wBAAwB,CAAC,cAAc,CAAC,CAAC;YACxD,eAAe,GAAG,qBAAqB,CAAC,cAAc,CAAC,CAAC;YACxD,OAAO;QACT,CAAC;IACH,CAAC;IAED,YAAY,GAAG,MAAM,sBAAsB,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;IAC9D,eAAe,GAAG,iBAAiB,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;AACxD,CAAC;AAED,SAAS,aAAa;IACpB,IAAI,CAAC,eAAe;QAAE,OAAO,IAAI,CAAC;IAClC,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC;AACrC,CAAC;AAED,SAAS,kBAAkB,CAAC,OAAqB;IAC/C,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM;QAAE,OAAO,IAAI,CAAC;IACzC,MAAM,IAAI,GAAG,OAAsB,CAAC;IACpC,IAAI,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC,OAAO,CAAC;IAC1D,OAAO,IAAI,CAAC,OAAO;SAChB,MAAM,CAAC,CAAC,KAAK,EAA2C,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC;SACjF,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC;SAC1B,IAAI,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC;AAED,SAAS,kBAAkB,CAAC,OAAoB,EAAE,IAAY;IAC5D,OAAO,EAAE,GAAG,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AACvC,CAAC;AAED,SAAS,wBAAwB,CAAC,QAAwB;IACxD,KAAK,IAAI,CAAC,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC9C,IAAI,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,KAAK,MAAM;YAAE,OAAO,CAAC,CAAC;IAC7C,CAAC;IACD,OAAO,CAAC,CAAC,CAAC;AACZ,CAAC;AAED,SAAS,kBAAkB,CAAC,OAAsB;IAChD,MAAM,IAAI,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IACjC,MAAM,KAAK,GAAG;QACZ,WAAW,IAAI,CAAC,MAAM,EAAE;QACxB,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI;QACvC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,IAAI;QAC7C,YAAY;YACV,CAAC,CAAC,WAAW,YAAY,CAAC,CAAC,CAAC,QAAQ,YAAY,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,UAAU,cAAc,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,mBAAmB,IAAI,OAAO,CAAC,EAAE;YACjJ,CAAC,CAAC,2BAA2B;QAC/B,YAAY,CAAC,CAAC,CAAC,SAAS,YAAY,CAAC,OAAO,KAAK,YAAY,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI;QAC7E,cAAc,CAAC,CAAC,CAAC,WAAW,cAAc,CAAC,OAAO,KAAK,cAAc,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI;QACrF,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI;KAC9D,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAClB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,MAAM,CAAC,OAAO,UAAU,iBAAiB,CAAC,EAAgB;IACxD,EAAE,CAAC,YAAY,CAAC,qBAAqB,EAAE;QACrC,WAAW,EAAE,4CAA4C,uBAAuB,IAAI,oBAAoB,GAAG;QAC3G,IAAI,EAAE,QAAQ;KACf,CAAC,CAAC;IAEH,EAAE,CAAC,EAAE,CAAC,eAAe,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE;QAC3C,MAAM,MAAM,GAAG,kBAAkB,EAAE,CAAC;QACpC,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC;QAC1B,mBAAmB,GAAG,MAAM,CAAC,WAAW,CAAC;QACzC,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC;QAC/B,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC;QAC3B,UAAU,GAAG,GAAG,CAAC;QACjB,cAAc,GAAG,IAAI,CAAC;QACtB,YAAY,GAAG,IAAI,CAAC;QAEpB,IAAI,GAAG,CAAC,QAAQ,KAAK,UAAU;YAAE,OAAO;QAExC,MAAM,OAAO,GAAG,IAAI,aAAa,CAAC,GAAG,CAAC,CAAC;QACvC,aAAa,GAAG,OAAO,CAAC;QAExB,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;QACtB,OAAO,CAAC,iBAAiB,EAAE,CAAC;QAC5B,IAAI,GAAG,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;YAC9B,OAAO,CAAC,gBAAgB,EAAE,CAAC;QAC7B,CAAC;QACD,IAAI,CAAC;YACH,MAAM,mBAAmB,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QACrC,CAAC;QAAC,MAAM,CAAC;YACP,+CAA+C;QACjD,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,EAAE,CAAC,kBAAkB,EAAE,KAAK,IAAI,EAAE;QACnC,IAAI,aAAa,EAAE,CAAC;YAClB,MAAM,aAAa,CAAC,IAAI,EAAE,CAAC;YAC3B,aAAa,GAAG,IAAI,CAAC;QACvB,CAAC;QACD,UAAU,GAAG,IAAI,CAAC;QAClB,mBAAmB,GAAG,SAAS,CAAC;QAChC,cAAc,GAAG,IAAI,CAAC;QACtB,YAAY,GAAG,IAAI,CAAC;QACpB,YAAY,GAAG,IAAI,CAAC;QACpB,eAAe,GAAG,IAAI,CAAC;QACvB,cAAc,GAAG,IAAI,CAAC;IACxB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,EAAE,CAAC,cAAc,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE;QAC1C,MAAM,mBAAmB,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,EAAE,CAAC,aAAa,EAAE,GAAG,EAAE;QACxB,cAAc,GAAG,IAAI,CAAC;IACxB,CAAC,CAAC,CAAC;IAEH,MAAM,eAAe,GAAG,kBAAkB,EAAE,CAAC;IAC7C,mBAAmB,GAAG,eAAe,CAAC,WAAW,CAAC;IAElD,MAAM,QAAQ,GAAG,mBAAmB,CAAC;QACnC,WAAW,EAAE,eAAe,CAAC,MAAM,CAAC,WAAW;QAC/C,aAAa,EAAE,eAAe,CAAC,MAAM,CAAC,aAAa;KACpD,CAAC,CAAC;IAEH,EAAE,CAAC,eAAe,CAAC,QAAQ,EAAE;QAC3B,WAAW,EAAE,+CAA+C;QAC5D,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;YAC5B,MAAM,OAAO,GAAG,aAAa,CAAC;YAC9B,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,gCAAgC,EAAE,SAAS,CAAC,CAAC;gBAC3D,OAAO;YACT,CAAC;YACD,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,kBAAkB,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,CAAC;QACrD,CAAC;KACF,CAAC,CAAC;IAEH,EAAE,CAAC,YAAY,CAAC;QACd,IAAI,EAAE,kBAAkB;QACxB,KAAK,EAAE,eAAe;QACtB,WAAW,EAAE,yBAAyB;QACtC,aAAa,EAAE,4BAA4B;QAC3C,gBAAgB,EAAE,CAAC,GAAG,+BAA+B,CAAC;QACtD,UAAU,EAAE,kBAAkB;QAC9B,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM;YACvC,MAAM,OAAO,GAAG,aAAa,CAAC;YAC9B,IAAI,CAAC,OAAO,EAAE,CAAC;gBACf,OAAO;oBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,6BAA6B,EAAE,CAAC;oBAChE,OAAO,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE;oBAC7B,OAAO,EAAE,IAAI;iBACd,CAAC;YACF,CAAC;YACD,MAAM,IAAI,GAAG,sBAAsB,CAAC,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,CAAC,CAAC;YACxE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC;YAC9D,MAAM,SAAS,GAAG,YAAY,CAAC,MAAM,CAAC,OAAO,EAAE;gBAC7C,QAAQ,EAAE,gBAAgB;gBAC1B,QAAQ,EAAE,gBAAgB;aAC3B,CAAC,CAAC;YACH,IAAI,IAAI,GAAG,SAAS,CAAC,OAAO,CAAC;YAC7B,IAAI,SAAS,CAAC,SAAS,EAAE,CAAC;gBACxB,IAAI,IAAI,mBAAmB,SAAS,CAAC,UAAU,WAAW,SAAS,CAAC,UAAU,SAAS,CAAC;YAC1F,CAAC;YACD,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;gBACjC,OAAO,EAAE,EAAE,SAAS,EAAE,SAAS,CAAC,SAAS,EAAE;gBAC3C,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,KAAK;aACjC,CAAC;QACJ,CAAC;KACF,CAAC,CAAC;IAEH,MAAM,YAAY,GAAG,eAAe,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;IAC7D,IAAI,YAAY,EAAE,CAAC;QACjB,MAAM,UAAU,GAAG,sBAAsB,CAAC,YAAY,CAAC,CAAC;QACxD,EAAE,CAAC,YAAY,CAAC;YACd,IAAI,EAAE,kBAAkB;YACxB,KAAK,EAAE,eAAe;YACtB,WAAW,EAAE,yBAAyB;YACtC,aAAa,EAAE,4BAA4B;YAC3C,gBAAgB,EAAE,CAAC,GAAG,+BAA+B,CAAC;YACtD,UAAU,EAAE,kBAAkB;YAC9B,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,MAAM;gBAC/B,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;gBAC5D,OAAO;oBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC;oBACjD,OAAO,EAAE,EAAE;oBACX,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,KAAK;iBACjC,CAAC;YACJ,CAAC;SACF,CAAC,CAAC;IACL,CAAC;IAED,EAAE,CAAC,EAAE,CAAC,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;QACpC,MAAM,OAAO,GAAG,aAAa,CAAC;QAC9B,MAAM,GAAG,GAAG,UAAU,CAAC;QACvB,IAAI,CAAC,OAAO,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,QAAQ,KAAK,UAAU;YAAE,OAAO;QAE5D,MAAM,SAAS,GAAG,wBAAwB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC3D,IAAI,SAAS,GAAG,CAAC;YAAE,OAAO;QAE1B,MAAM,QAAQ,GAAG,kBAAkB,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAE,CAAC,CAAC;QAChE,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE;YAAE,OAAO;QAE9B,IAAI,cAAkC,CAAC;QACvC,IAAI,cAAc,EAAE,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAC1C,cAAc,GAAG,cAAc,CAAC,cAAc,CAAC;QACjD,CAAC;aAAM,CAAC;YACN,MAAM,aAAa,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,MAAM,CAAC;YAC7E,MAAM,SAAS,GAAG,MAAM,kBAAkB,CAAC,QAAQ,EAAE,OAAO,EAAE;gBAC5D,MAAM,EAAE,YAAY;gBACpB,WAAW,EAAE,aAAa,KAAK,CAAC;gBAChC,QAAQ;gBACR,MAAM,EAAE,GAAG,CAAC,MAAM;gBAClB,UAAU,EAAE,aAAa,EAAE;aAC5B,CAAC,CAAC;YACH,IAAI,CAAC,SAAS,EAAE,cAAc;gBAAE,OAAO;YACvC,cAAc,GAAG,SAAS,CAAC,cAAc,CAAC;YAC1C,cAAc,GAAG,EAAE,QAAQ,EAAE,cAAc,EAAE,CAAC;QAChD,CAAC;QAED,MAAM,YAAY,GAAG,0BAA0B,CAC7C,QAAQ,EACR,QAAQ,EACR,cAAc,CACf,CAAC;QAEF,MAAM,QAAQ,GAAG,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC;QACrC,QAAQ,CAAC,SAAS,CAAC,GAAG,kBAAkB,CACtC,QAAQ,CAAC,SAAS,CAAgB,EAClC,YAAY,CACb,CAAC;QAEF,OAAO,EAAE,QAAQ,EAAE,CAAC;IACtB,CAAC,CAAC,CAAC;AACL,CAAC;AAED,OAAO,EAAE,iBAAiB,EAAE,CAAC"}
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
- * Mode B local memory: spawn tlm sidecar, query via Unix socket.
19
- * No Cloud pullerbundle must exist under bundleRoot/current.
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
- * Start interval-based auto-training. If already running, stops and restarts.
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>;
@@ -1 +1 @@
1
- {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,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,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;;;GAGG;AACH,qBAAa,aAAa;IASZ,OAAO,CAAC,GAAG;IARvB,OAAO,CAAC,aAAa,CAA6B;IAClD,OAAO,CAAC,MAAM,CAAM;IACpB,OAAO,CAAC,OAAO,CAA+B;IAC9C,OAAO,CAAC,MAAM,CAA8B;IAC5C,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;IAOhC,SAAS,IAAI,aAAa,GAAG,IAAI;IAI3B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IA8C5B;;;OAGG;IACH,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,YAAY,KAAK,IAAI,GAAG,IAAI;IAc5D;;;OAGG;IACH,iBAAiB,IAAI,IAAI;IAQzB,eAAe,IAAI,YAAY,GAAG,IAAI;IAIhC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAiBrB,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;IAWI,MAAM,IAAI,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;CAQ9C"}
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
- * Mode B local memory: spawn tlm sidecar, query via Unix socket.
8
- * No Cloud pullerbundle must exist under bundleRoot/current.
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.serviceStatus = "unavailable";
60
- this.reason = "tlm_binary_missing";
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 (err) {
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
- * Start interval-based auto-training. If already running, stops and restarts.
81
- * Uses config.trainer.auto_interval.
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 dbPath = path.join(this.cfg.bundleRoot, "sessions.db");
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" || !this.client) {
164
+ if (this.serviceStatus !== "ready") {
139
165
  return { env: null, errorClass: "unavailable" };
140
166
  }
141
- const timeout = AbortSignal.timeout(this.cfg.queryTimeoutMs);
142
- const combined = signal
143
- ? AbortSignal.any([signal, timeout])
144
- : timeout;
145
- return this.client.query(intent, combined);
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 (!this.client)
149
- return null;
150
- try {
151
- return await this.client.health();
180
+ if (this.client) {
181
+ try {
182
+ return await this.client.health();
183
+ }
184
+ catch {
185
+ return null;
186
+ }
152
187
  }
153
- catch {
154
- return null;
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