@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,224 @@
|
|
|
1
|
+
import { StringEnum } from "@earendil-works/pi-ai";
|
|
2
|
+
import { truncateHead } from "@earendil-works/pi-coding-agent";
|
|
3
|
+
import { Type } from "typebox";
|
|
4
|
+
import { createPiLLMClient, DEFAULT_HELPER_MODEL, DEFAULT_HELPER_PROVIDER, resolveMemoryHelperLLM, } from "./adapters/piComplete.js";
|
|
5
|
+
import { defaultMemoryConfig } from "./config.js";
|
|
6
|
+
import { createFallbackQuery } from "./fallback/index.js";
|
|
7
|
+
import { runMemoryPreflight } from "./preflight/hook.js";
|
|
8
|
+
import { injectPrivateMemoryContext } from "./preflight/strip.js";
|
|
9
|
+
import { MemoryService } from "./service.js";
|
|
10
|
+
import { createMemoryAppendTool, MEMORY_APPEND_DESCRIPTION, MEMORY_APPEND_NAME, MEMORY_APPEND_PROMPT_GUIDELINES, MEMORY_APPEND_PROMPT_SNIPPET, } from "./tools/memoryAppend.js";
|
|
11
|
+
import { createMemoryRecallTool, MEMORY_RECALL_DESCRIPTION, MEMORY_RECALL_NAME, MEMORY_RECALL_PROMPT_GUIDELINES, MEMORY_RECALL_PROMPT_SNIPPET, } from "./tools/memoryRecall.js";
|
|
12
|
+
const MemoryRecallParams = Type.Object({
|
|
13
|
+
mode: Type.Optional(StringEnum(["direct_relation", "path_query", "typed_neighborhood"])),
|
|
14
|
+
anchor_mentions: Type.Array(Type.String()),
|
|
15
|
+
relation_constraints: Type.Optional(Type.Array(Type.String())),
|
|
16
|
+
candidate_type: Type.Optional(Type.String()),
|
|
17
|
+
scope_filter: Type.Optional(Type.Array(Type.String())),
|
|
18
|
+
target_slot: Type.Optional(StringEnum(["head", "tail"])),
|
|
19
|
+
time_window: Type.Optional(Type.String()),
|
|
20
|
+
evidence_budget: Type.Optional(Type.Number()),
|
|
21
|
+
result_limit: Type.Optional(Type.Number()),
|
|
22
|
+
});
|
|
23
|
+
const MemoryAppendParams = Type.Object({
|
|
24
|
+
content: Type.String({ description: "New entries to append (markdown bullet points)." }),
|
|
25
|
+
});
|
|
26
|
+
const RECALL_MAX_LINES = 200;
|
|
27
|
+
const RECALL_MAX_BYTES = 32_000;
|
|
28
|
+
let sharedService = null;
|
|
29
|
+
let sessionCfg = null;
|
|
30
|
+
let sharedHelper = null;
|
|
31
|
+
let sharedLLMClient = null;
|
|
32
|
+
let preflightCache = null;
|
|
33
|
+
export function getSharedMemoryService() {
|
|
34
|
+
return sharedService;
|
|
35
|
+
}
|
|
36
|
+
async function refreshMemoryHelper(ctx, pi) {
|
|
37
|
+
sharedHelper = await resolveMemoryHelperLLM(ctx, pi.getFlag("memory-helper-model"));
|
|
38
|
+
sharedLLMClient = createPiLLMClient(ctx, pi.getFlag("memory-helper-model"));
|
|
39
|
+
}
|
|
40
|
+
function getRerankOpts() {
|
|
41
|
+
if (!sharedLLMClient)
|
|
42
|
+
return null;
|
|
43
|
+
return { client: sharedLLMClient };
|
|
44
|
+
}
|
|
45
|
+
function getUserMessageText(message) {
|
|
46
|
+
if (message.role !== "user")
|
|
47
|
+
return null;
|
|
48
|
+
const user = message;
|
|
49
|
+
if (typeof user.content === "string")
|
|
50
|
+
return user.content;
|
|
51
|
+
return user.content
|
|
52
|
+
.filter((block) => block.type === "text")
|
|
53
|
+
.map((block) => block.text)
|
|
54
|
+
.join("\n");
|
|
55
|
+
}
|
|
56
|
+
function setUserMessageText(message, text) {
|
|
57
|
+
return { ...message, content: text };
|
|
58
|
+
}
|
|
59
|
+
function findLastUserMessageIndex(messages) {
|
|
60
|
+
for (let i = messages.length - 1; i >= 0; i--) {
|
|
61
|
+
if (messages[i]?.role === "user")
|
|
62
|
+
return i;
|
|
63
|
+
}
|
|
64
|
+
return -1;
|
|
65
|
+
}
|
|
66
|
+
function formatMemoryStatus(service) {
|
|
67
|
+
const snap = service.getStatus();
|
|
68
|
+
const lines = [
|
|
69
|
+
`status: ${snap.status}`,
|
|
70
|
+
snap.reason ? `reason: ${snap.reason}` : null,
|
|
71
|
+
snap.health ? `health: ${JSON.stringify(snap.health)}` : null,
|
|
72
|
+
].filter(Boolean);
|
|
73
|
+
return lines.join("\n");
|
|
74
|
+
}
|
|
75
|
+
export default function piMemoryExtension(pi) {
|
|
76
|
+
pi.registerFlag("memory-helper-model", {
|
|
77
|
+
description: `Model for memory intent helper (default: ${DEFAULT_HELPER_PROVIDER}/${DEFAULT_HELPER_MODEL})`,
|
|
78
|
+
type: "string",
|
|
79
|
+
});
|
|
80
|
+
pi.on("session_start", async (_event, ctx) => {
|
|
81
|
+
const cfg = defaultMemoryConfig();
|
|
82
|
+
sessionCfg = cfg;
|
|
83
|
+
preflightCache = null;
|
|
84
|
+
sharedHelper = null;
|
|
85
|
+
if (cfg.provider === "disabled")
|
|
86
|
+
return;
|
|
87
|
+
const service = new MemoryService(cfg);
|
|
88
|
+
sharedService = service;
|
|
89
|
+
try {
|
|
90
|
+
await service.start();
|
|
91
|
+
service.startSessionIndex();
|
|
92
|
+
if (cfg.trainer.auto_interval) {
|
|
93
|
+
service.startAutoTrainer();
|
|
94
|
+
}
|
|
95
|
+
await refreshMemoryHelper(ctx, pi);
|
|
96
|
+
}
|
|
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
|
+
}
|
|
102
|
+
}
|
|
103
|
+
});
|
|
104
|
+
pi.on("session_shutdown", async () => {
|
|
105
|
+
if (sharedService) {
|
|
106
|
+
await sharedService.stop();
|
|
107
|
+
sharedService = null;
|
|
108
|
+
}
|
|
109
|
+
sessionCfg = null;
|
|
110
|
+
sharedHelper = null;
|
|
111
|
+
sharedLLMClient = null;
|
|
112
|
+
preflightCache = null;
|
|
113
|
+
});
|
|
114
|
+
pi.on("model_select", async (_event, ctx) => {
|
|
115
|
+
await refreshMemoryHelper(ctx, pi);
|
|
116
|
+
});
|
|
117
|
+
pi.on("agent_start", () => {
|
|
118
|
+
preflightCache = null;
|
|
119
|
+
});
|
|
120
|
+
const fallback = createFallbackQuery({
|
|
121
|
+
sessionsDir: defaultMemoryConfig().sessionsDir,
|
|
122
|
+
memoryMdPaths: defaultMemoryConfig().memoryMdPaths,
|
|
123
|
+
});
|
|
124
|
+
pi.registerCommand("memory", {
|
|
125
|
+
description: "Show pi-memory sidecar status and bundle info",
|
|
126
|
+
handler: async (_args, ctx) => {
|
|
127
|
+
const service = sharedService;
|
|
128
|
+
if (!service) {
|
|
129
|
+
ctx.ui.notify("pi-memory: service not started", "warning");
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
ctx.ui.notify(formatMemoryStatus(service), "info");
|
|
133
|
+
},
|
|
134
|
+
});
|
|
135
|
+
pi.registerTool({
|
|
136
|
+
name: MEMORY_RECALL_NAME,
|
|
137
|
+
label: "Memory Recall",
|
|
138
|
+
description: MEMORY_RECALL_DESCRIPTION,
|
|
139
|
+
promptSnippet: MEMORY_RECALL_PROMPT_SNIPPET,
|
|
140
|
+
promptGuidelines: [...MEMORY_RECALL_PROMPT_GUIDELINES],
|
|
141
|
+
parameters: MemoryRecallParams,
|
|
142
|
+
async execute(_toolCallId, params, signal) {
|
|
143
|
+
const service = sharedService;
|
|
144
|
+
if (!service) {
|
|
145
|
+
return {
|
|
146
|
+
content: [{ type: "text", text: "Memory service not started." }],
|
|
147
|
+
details: { truncated: false },
|
|
148
|
+
isError: true,
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
const tool = createMemoryRecallTool(service, fallback, getRerankOpts());
|
|
152
|
+
const result = await tool.run(JSON.stringify(params), signal);
|
|
153
|
+
const truncated = truncateHead(result.content, {
|
|
154
|
+
maxLines: RECALL_MAX_LINES,
|
|
155
|
+
maxBytes: RECALL_MAX_BYTES,
|
|
156
|
+
});
|
|
157
|
+
let text = truncated.content;
|
|
158
|
+
if (truncated.truncated) {
|
|
159
|
+
text += `\n\n[truncated: ${truncated.totalLines} lines, ${truncated.totalBytes} bytes]`;
|
|
160
|
+
}
|
|
161
|
+
return {
|
|
162
|
+
content: [{ type: "text", text }],
|
|
163
|
+
details: { truncated: truncated.truncated },
|
|
164
|
+
isError: result.isError ?? false,
|
|
165
|
+
};
|
|
166
|
+
},
|
|
167
|
+
});
|
|
168
|
+
const memoryMdPath = defaultMemoryConfig().memoryMdPaths[0];
|
|
169
|
+
if (memoryMdPath) {
|
|
170
|
+
const appendTool = createMemoryAppendTool(memoryMdPath);
|
|
171
|
+
pi.registerTool({
|
|
172
|
+
name: MEMORY_APPEND_NAME,
|
|
173
|
+
label: "Memory Append",
|
|
174
|
+
description: MEMORY_APPEND_DESCRIPTION,
|
|
175
|
+
promptSnippet: MEMORY_APPEND_PROMPT_SNIPPET,
|
|
176
|
+
promptGuidelines: [...MEMORY_APPEND_PROMPT_GUIDELINES],
|
|
177
|
+
parameters: MemoryAppendParams,
|
|
178
|
+
async execute(_toolCallId, params) {
|
|
179
|
+
const result = await appendTool.run(JSON.stringify(params));
|
|
180
|
+
return {
|
|
181
|
+
content: [{ type: "text", text: result.content }],
|
|
182
|
+
details: {},
|
|
183
|
+
isError: result.isError ?? false,
|
|
184
|
+
};
|
|
185
|
+
},
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
pi.on("context", async (event, ctx) => {
|
|
189
|
+
const service = sharedService;
|
|
190
|
+
const cfg = sessionCfg;
|
|
191
|
+
if (!service || !cfg || cfg.provider === "disabled")
|
|
192
|
+
return;
|
|
193
|
+
const userIndex = findLastUserMessageIndex(event.messages);
|
|
194
|
+
if (userIndex < 0)
|
|
195
|
+
return;
|
|
196
|
+
const userText = getUserMessageText(event.messages[userIndex]);
|
|
197
|
+
if (!userText?.trim())
|
|
198
|
+
return;
|
|
199
|
+
let privateContext;
|
|
200
|
+
if (preflightCache?.userText === userText) {
|
|
201
|
+
privateContext = preflightCache.privateContext;
|
|
202
|
+
}
|
|
203
|
+
else {
|
|
204
|
+
const userTurnCount = event.messages.filter((m) => m.role === "user").length;
|
|
205
|
+
const preflight = await runMemoryPreflight(userText, service, {
|
|
206
|
+
helper: sharedHelper,
|
|
207
|
+
forceHelper: userTurnCount === 1,
|
|
208
|
+
fallback,
|
|
209
|
+
signal: ctx.signal,
|
|
210
|
+
rerankOpts: getRerankOpts(),
|
|
211
|
+
});
|
|
212
|
+
if (!preflight?.privateContext)
|
|
213
|
+
return;
|
|
214
|
+
privateContext = preflight.privateContext;
|
|
215
|
+
preflightCache = { userText, privateContext };
|
|
216
|
+
}
|
|
217
|
+
const injectedText = injectPrivateMemoryContext(userText, userText, privateContext);
|
|
218
|
+
const messages = [...event.messages];
|
|
219
|
+
messages[userIndex] = setUserMessageText(messages[userIndex], injectedText);
|
|
220
|
+
return { messages };
|
|
221
|
+
});
|
|
222
|
+
}
|
|
223
|
+
export { piMemoryExtension };
|
|
224
|
+
//# sourceMappingURL=pi-extension.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pi-extension.js","sourceRoot":"","sources":["../src/pi-extension.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import type { QueryIntent } from "../types.js";
|
|
2
|
+
export declare const MEMORY_HELPER_TOOL_NAME = "compile_memory_intents";
|
|
3
|
+
export declare const MEMORY_HELPER_MAX_INPUT_RUNES = 500;
|
|
4
|
+
export interface CompileMemoryIntentsResult {
|
|
5
|
+
should_recall: boolean;
|
|
6
|
+
gate_reason?: string;
|
|
7
|
+
intents: QueryIntent[];
|
|
8
|
+
}
|
|
9
|
+
/** Optional small-model helper; null → regex fast-path only (fail-silent). */
|
|
10
|
+
export interface MemoryHelperLLM {
|
|
11
|
+
compileIntents(text: string, signal?: AbortSignal): Promise<CompileMemoryIntentsResult>;
|
|
12
|
+
}
|
|
13
|
+
export interface DetectIntentsOptions {
|
|
14
|
+
forceHelper?: boolean;
|
|
15
|
+
signal?: AbortSignal;
|
|
16
|
+
}
|
|
17
|
+
/** JSON schema for forced tool_use compile_memory_intents (helper providers). */
|
|
18
|
+
export declare const COMPILE_MEMORY_INTENTS_PARAMETERS: {
|
|
19
|
+
readonly type: "object";
|
|
20
|
+
readonly additionalProperties: false;
|
|
21
|
+
readonly properties: {
|
|
22
|
+
readonly should_recall: {
|
|
23
|
+
readonly type: "boolean";
|
|
24
|
+
readonly description: "True only when the user is asking about their own private episodic memory.";
|
|
25
|
+
};
|
|
26
|
+
readonly gate_reason: {
|
|
27
|
+
readonly type: "string";
|
|
28
|
+
readonly description: "One short phrase (under 40 chars) describing the gate decision.";
|
|
29
|
+
};
|
|
30
|
+
readonly intents: {
|
|
31
|
+
readonly type: "array";
|
|
32
|
+
readonly maxItems: 3;
|
|
33
|
+
readonly items: {
|
|
34
|
+
readonly type: "object";
|
|
35
|
+
readonly additionalProperties: false;
|
|
36
|
+
readonly properties: {
|
|
37
|
+
readonly mode: {
|
|
38
|
+
readonly type: "string";
|
|
39
|
+
readonly enum: readonly ["direct_relation", "path_query", "typed_neighborhood"];
|
|
40
|
+
};
|
|
41
|
+
readonly anchor_mentions: {
|
|
42
|
+
readonly type: "array";
|
|
43
|
+
readonly items: {
|
|
44
|
+
readonly type: "string";
|
|
45
|
+
};
|
|
46
|
+
readonly minItems: 1;
|
|
47
|
+
readonly maxItems: 4;
|
|
48
|
+
};
|
|
49
|
+
readonly relation_constraints: {
|
|
50
|
+
readonly type: "array";
|
|
51
|
+
readonly items: {
|
|
52
|
+
readonly type: "string";
|
|
53
|
+
};
|
|
54
|
+
readonly maxItems: 4;
|
|
55
|
+
};
|
|
56
|
+
readonly candidate_type: {
|
|
57
|
+
readonly type: "string";
|
|
58
|
+
};
|
|
59
|
+
readonly scope_filter: {
|
|
60
|
+
readonly type: "array";
|
|
61
|
+
readonly items: {
|
|
62
|
+
readonly type: "string";
|
|
63
|
+
};
|
|
64
|
+
readonly maxItems: 4;
|
|
65
|
+
};
|
|
66
|
+
readonly target_slot: {
|
|
67
|
+
readonly type: "string";
|
|
68
|
+
readonly enum: readonly ["head", "tail"];
|
|
69
|
+
};
|
|
70
|
+
readonly time_window: {
|
|
71
|
+
readonly type: "string";
|
|
72
|
+
};
|
|
73
|
+
readonly evidence_budget: {
|
|
74
|
+
readonly type: "integer";
|
|
75
|
+
readonly minimum: 1;
|
|
76
|
+
readonly maximum: 50;
|
|
77
|
+
};
|
|
78
|
+
readonly result_limit: {
|
|
79
|
+
readonly type: "integer";
|
|
80
|
+
readonly minimum: 1;
|
|
81
|
+
readonly maximum: 100;
|
|
82
|
+
};
|
|
83
|
+
};
|
|
84
|
+
readonly required: readonly ["mode", "anchor_mentions"];
|
|
85
|
+
};
|
|
86
|
+
};
|
|
87
|
+
};
|
|
88
|
+
readonly required: readonly ["should_recall", "intents"];
|
|
89
|
+
};
|
|
90
|
+
export declare function detectExactMemoryIntents(query: string): QueryIntent[];
|
|
91
|
+
export declare function defaultDirectMemoryIntent(anchor: string): QueryIntent;
|
|
92
|
+
export declare function cleanMemoryAnchor(s: string): string;
|
|
93
|
+
export declare function isPronounAnchor(s: string): boolean;
|
|
94
|
+
export declare function looksLikeTaskText(s: string): boolean;
|
|
95
|
+
export declare function looksMemoryRelevant(query: string): boolean;
|
|
96
|
+
export declare function sanitizeMemoryIntents(intents: QueryIntent[]): QueryIntent[];
|
|
97
|
+
/**
|
|
98
|
+
* Compile user message into QueryIntent values.
|
|
99
|
+
* Regex fast-path bypasses helper; otherwise helper LLM when provided.
|
|
100
|
+
*/
|
|
101
|
+
export declare function detectMemoryIntents(query: string, helper: MemoryHelperLLM | null | undefined, options?: DetectIntentsOptions): Promise<QueryIntent[]>;
|
|
102
|
+
//# sourceMappingURL=detectIntents.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detectIntents.d.ts","sourceRoot":"","sources":["../../src/preflight/detectIntents.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAa,MAAM,aAAa,CAAC;AAE1D,eAAO,MAAM,uBAAuB,2BAA2B,CAAC;AAChE,eAAO,MAAM,6BAA6B,MAAM,CAAC;AAEjD,MAAM,WAAW,0BAA0B;IACzC,aAAa,EAAE,OAAO,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,WAAW,EAAE,CAAC;CACxB;AAED,8EAA8E;AAC9E,MAAM,WAAW,eAAe;IAC9B,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,0BAA0B,CAAC,CAAC;CACzF;AAED,MAAM,WAAW,oBAAoB;IACnC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AA2VD,iFAAiF;AACjF,eAAO,MAAM,iCAAiC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoDpC,CAAC;AAEX,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,EAAE,CAWrE;AAED,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,MAAM,GAAG,WAAW,CAOrE;AAED,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAUnD;AAED,wBAAgB,eAAe,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAqBlD;AAED,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAgCpD;AAmBD,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAS1D;AA2CD,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,WAAW,EAAE,GAAG,WAAW,EAAE,CA0C3E;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CACvC,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,eAAe,GAAG,IAAI,GAAG,SAAS,EAC1C,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,WAAW,EAAE,CAAC,CAoBxB"}
|