bernard-agent 0.4.0 → 0.5.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 +69 -14
- package/THIRD-PARTY-NOTICES +212 -0
- package/dist/agent.d.ts +32 -3
- package/dist/agent.js +59 -11
- package/dist/agent.js.map +1 -1
- package/dist/config.d.ts +67 -0
- package/dist/config.js +82 -20
- package/dist/config.js.map +1 -1
- package/dist/context.d.ts +7 -0
- package/dist/context.js +4 -0
- package/dist/context.js.map +1 -1
- package/dist/cron/cli.d.ts +6 -0
- package/dist/cron/cli.js +8 -0
- package/dist/cron/cli.js.map +1 -1
- package/dist/cron/client.d.ts +9 -0
- package/dist/cron/client.js +9 -0
- package/dist/cron/client.js.map +1 -1
- package/dist/cron/daemon.js +8 -0
- package/dist/cron/daemon.js.map +1 -1
- package/dist/cron/log-store.d.ts +18 -0
- package/dist/cron/log-store.js +22 -7
- package/dist/cron/log-store.js.map +1 -1
- package/dist/cron/notify.d.ts +7 -0
- package/dist/cron/notify.js +16 -0
- package/dist/cron/notify.js.map +1 -1
- package/dist/cron/runner.d.ts +11 -0
- package/dist/cron/runner.js +63 -13
- package/dist/cron/runner.js.map +1 -1
- package/dist/cron/scheduler.d.ts +16 -0
- package/dist/cron/scheduler.js +16 -0
- package/dist/cron/scheduler.js.map +1 -1
- package/dist/cron/store.d.ts +32 -0
- package/dist/cron/store.js +51 -24
- package/dist/cron/store.js.map +1 -1
- package/dist/cron/types.d.ts +19 -0
- package/dist/domains.d.ts +15 -0
- package/dist/domains.js +19 -0
- package/dist/domains.js.map +1 -1
- package/dist/embeddings.d.ts +7 -1
- package/dist/embeddings.js +43 -1
- package/dist/embeddings.js.map +1 -1
- package/dist/facts-cli.d.ts +14 -0
- package/dist/facts-cli.js +51 -0
- package/dist/facts-cli.js.map +1 -1
- package/dist/history.d.ts +8 -0
- package/dist/history.js +14 -9
- package/dist/history.js.map +1 -1
- package/dist/index.d.ts +5 -0
- package/dist/index.js +22 -1
- package/dist/index.js.map +1 -1
- package/dist/logger.d.ts +6 -0
- package/dist/logger.js +6 -0
- package/dist/logger.js.map +1 -1
- package/dist/mcp.d.ts +87 -0
- package/dist/mcp.js +106 -25
- package/dist/mcp.js.map +1 -1
- package/dist/memory-context.d.ts +4 -0
- package/dist/memory-context.js +4 -2
- package/dist/memory-context.js.map +1 -1
- package/dist/memory.d.ts +17 -0
- package/dist/memory.js +23 -7
- package/dist/memory.js.map +1 -1
- package/dist/migrate.d.ts +13 -0
- package/dist/migrate.js +209 -0
- package/dist/migrate.js.map +1 -0
- package/dist/output.d.ts +45 -0
- package/dist/output.js +61 -0
- package/dist/output.js.map +1 -1
- package/dist/paths.d.ts +23 -0
- package/dist/paths.js +82 -0
- package/dist/paths.js.map +1 -0
- package/dist/providers/index.d.ts +7 -0
- package/dist/providers/index.js +7 -0
- package/dist/providers/index.js.map +1 -1
- package/dist/providers/types.d.ts +4 -0
- package/dist/rag-query.d.ts +20 -0
- package/dist/rag-query.js +69 -3
- package/dist/rag-query.js.map +1 -1
- package/dist/rag-worker.js.map +1 -1
- package/dist/rag.d.ts +27 -0
- package/dist/rag.js +29 -19
- package/dist/rag.js.map +1 -1
- package/dist/repl.d.ts +6 -0
- package/dist/repl.js +147 -9
- package/dist/repl.js.map +1 -1
- package/dist/routines.d.ts +49 -0
- package/dist/routines.js +172 -0
- package/dist/routines.js.map +1 -0
- package/dist/setup.d.ts +5 -0
- package/dist/setup.js +7 -1
- package/dist/setup.js.map +1 -1
- package/dist/theme.d.ts +41 -0
- package/dist/theme.js +25 -0
- package/dist/theme.js.map +1 -1
- package/dist/tools/cron-logs.d.ts +6 -0
- package/dist/tools/cron-logs.js +6 -0
- package/dist/tools/cron-logs.js.map +1 -1
- package/dist/tools/cron.d.ts +7 -0
- package/dist/tools/cron.js +7 -0
- package/dist/tools/cron.js.map +1 -1
- package/dist/tools/datetime.d.ts +1 -0
- package/dist/tools/datetime.js +1 -0
- package/dist/tools/datetime.js.map +1 -1
- package/dist/tools/index.d.ts +10 -336
- package/dist/tools/index.js +11 -1
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/mcp-url.d.ts +6 -0
- package/dist/tools/mcp-url.js +6 -0
- package/dist/tools/mcp-url.js.map +1 -1
- package/dist/tools/mcp.d.ts +6 -0
- package/dist/tools/mcp.js +6 -0
- package/dist/tools/mcp.js.map +1 -1
- package/dist/tools/memory.d.ts +14 -0
- package/dist/tools/memory.js +16 -1
- package/dist/tools/memory.js.map +1 -1
- package/dist/tools/routine.d.ts +35 -0
- package/dist/tools/routine.js +93 -0
- package/dist/tools/routine.js.map +1 -0
- package/dist/tools/shell.d.ts +15 -1
- package/dist/tools/shell.js +15 -1
- package/dist/tools/shell.js.map +1 -1
- package/dist/tools/subagent.d.ts +18 -1
- package/dist/tools/subagent.js +18 -1
- package/dist/tools/subagent.js.map +1 -1
- package/dist/tools/time.d.ts +19 -0
- package/dist/tools/time.js +19 -0
- package/dist/tools/time.js.map +1 -1
- package/dist/tools/types.d.ts +6 -0
- package/dist/tools/wait.d.ts +3 -0
- package/dist/tools/wait.js +3 -0
- package/dist/tools/wait.js.map +1 -1
- package/dist/tools/web.d.ts +6 -0
- package/dist/tools/web.js +11 -1
- package/dist/tools/web.js.map +1 -1
- package/dist/update.d.ts +5 -0
- package/dist/update.js +4 -5
- package/dist/update.js.map +1 -1
- package/package.json +2 -1
package/dist/output.js
CHANGED
|
@@ -17,12 +17,20 @@ const context_js_1 = require("./context.js");
|
|
|
17
17
|
const theme_js_1 = require("./theme.js");
|
|
18
18
|
const MAX_TOOL_OUTPUT_LENGTH = 2000;
|
|
19
19
|
const MAX_REPLAY_LENGTH = 200;
|
|
20
|
+
/**
|
|
21
|
+
* Formats a token count into a compact human-readable string (e.g. `"3.2k"`).
|
|
22
|
+
* @internal
|
|
23
|
+
*/
|
|
20
24
|
function formatTokenCount(n) {
|
|
21
25
|
if (n < 1000)
|
|
22
26
|
return String(n);
|
|
23
27
|
const k = n / 1000;
|
|
24
28
|
return k >= 10 ? `${Math.round(k)}k` : `${k.toFixed(1)}k`;
|
|
25
29
|
}
|
|
30
|
+
/**
|
|
31
|
+
* Formats a millisecond duration as `"Xs"` or `"XmYs"`.
|
|
32
|
+
* @internal
|
|
33
|
+
*/
|
|
26
34
|
function formatElapsed(ms) {
|
|
27
35
|
const totalSeconds = Math.floor(ms / 1000);
|
|
28
36
|
if (totalSeconds < 60)
|
|
@@ -31,6 +39,12 @@ function formatElapsed(ms) {
|
|
|
31
39
|
const seconds = totalSeconds % 60;
|
|
32
40
|
return `${minutes}m${seconds}s`;
|
|
33
41
|
}
|
|
42
|
+
/**
|
|
43
|
+
* Builds the dynamic status text shown next to the spinner animation.
|
|
44
|
+
*
|
|
45
|
+
* Displays elapsed time, cumulative token counts (up/down arrows),
|
|
46
|
+
* and percentage of context window remaining before compression triggers.
|
|
47
|
+
*/
|
|
34
48
|
function buildSpinnerMessage(stats) {
|
|
35
49
|
const elapsed = formatElapsed(Date.now() - stats.startTime);
|
|
36
50
|
if (stats.totalPromptTokens === 0 && stats.totalCompletionTokens === 0) {
|
|
@@ -43,6 +57,11 @@ function buildSpinnerMessage(stats) {
|
|
|
43
57
|
const remainingPct = Math.max(0, Math.round(((thresholdTokens - stats.latestPromptTokens) / thresholdTokens) * 100));
|
|
44
58
|
return `Thinking (${elapsed} | ${up}\u2191 ${down}\u2193 | ${remainingPct}% until compression)`;
|
|
45
59
|
}
|
|
60
|
+
/**
|
|
61
|
+
* Wraps an optional sub-agent prefix (e.g. `"sub:2"`) in a colored bracket label.
|
|
62
|
+
* Returns an empty string when no prefix is provided.
|
|
63
|
+
* @internal
|
|
64
|
+
*/
|
|
46
65
|
function formatPrefix(prefix) {
|
|
47
66
|
if (!prefix)
|
|
48
67
|
return '';
|
|
@@ -56,6 +75,14 @@ function formatPrefix(prefix) {
|
|
|
56
75
|
const SPINNER_FRAMES = ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏'];
|
|
57
76
|
let spinnerTimer = null;
|
|
58
77
|
let spinnerFrameIndex = 0;
|
|
78
|
+
/**
|
|
79
|
+
* Starts a braille-dot spinner animation on stdout.
|
|
80
|
+
*
|
|
81
|
+
* Hides the cursor and redraws at 80 ms intervals. If a spinner is already
|
|
82
|
+
* running the call is a no-op. Call {@link stopSpinner} to clear it.
|
|
83
|
+
*
|
|
84
|
+
* @param message - Static string or callback returning a dynamic status line.
|
|
85
|
+
*/
|
|
59
86
|
function startSpinner(message = 'Thinking') {
|
|
60
87
|
if (spinnerTimer)
|
|
61
88
|
return; // already running
|
|
@@ -68,6 +95,7 @@ function startSpinner(message = 'Thinking') {
|
|
|
68
95
|
spinnerFrameIndex++;
|
|
69
96
|
}, 80);
|
|
70
97
|
}
|
|
98
|
+
/** Stops the spinner, clears its line, and restores the cursor. */
|
|
71
99
|
function stopSpinner() {
|
|
72
100
|
if (!spinnerTimer)
|
|
73
101
|
return;
|
|
@@ -76,6 +104,7 @@ function stopSpinner() {
|
|
|
76
104
|
process.stdout.write('\r\x1B[2K'); // clear line
|
|
77
105
|
process.stdout.write('\x1B[?25h'); // show cursor
|
|
78
106
|
}
|
|
107
|
+
/** Prints the branded welcome banner with provider, model, and optional version info. */
|
|
79
108
|
function printWelcome(provider, model, version) {
|
|
80
109
|
const ver = version ? (0, theme_js_1.getTheme)().muted(` v${version}`) : '';
|
|
81
110
|
console.log((0, theme_js_1.getTheme)().accentBold('\n Bernard') + ver + (0, theme_js_1.getTheme)().muted(' — AI CLI Assistant'));
|
|
@@ -85,6 +114,7 @@ function printWelcome(provider, model, version) {
|
|
|
85
114
|
}
|
|
86
115
|
console.log((0, theme_js_1.getTheme)().muted(' Type /help for commands, exit to quit\n'));
|
|
87
116
|
}
|
|
117
|
+
/** Prints an assistant response, stopping any active spinner first. */
|
|
88
118
|
function printAssistantText(text, prefix) {
|
|
89
119
|
stopSpinner();
|
|
90
120
|
if (text.trim()) {
|
|
@@ -92,12 +122,23 @@ function printAssistantText(text, prefix) {
|
|
|
92
122
|
console.log(label + (0, theme_js_1.getTheme)().text(text));
|
|
93
123
|
}
|
|
94
124
|
}
|
|
125
|
+
/**
|
|
126
|
+
* Prints a one-line summary of a tool invocation.
|
|
127
|
+
*
|
|
128
|
+
* For the `shell` tool the raw command string is shown; for all others
|
|
129
|
+
* the args object is JSON-serialized.
|
|
130
|
+
*/
|
|
95
131
|
function printToolCall(toolName, args, prefix) {
|
|
96
132
|
stopSpinner();
|
|
97
133
|
const label = formatPrefix(prefix);
|
|
98
134
|
const argsStr = toolName === 'shell' ? String(args.command || '') : JSON.stringify(args);
|
|
99
135
|
console.log(label + (0, theme_js_1.getTheme)().toolCall(` ▶ ${toolName}`) + (0, theme_js_1.getTheme)().muted(`: ${argsStr}`));
|
|
100
136
|
}
|
|
137
|
+
/**
|
|
138
|
+
* Prints a tool's return value, truncated to {@link MAX_TOOL_OUTPUT_LENGTH} characters.
|
|
139
|
+
*
|
|
140
|
+
* Handles string results, `{ output: string }` shapes, and arbitrary objects.
|
|
141
|
+
*/
|
|
101
142
|
function printToolResult(toolName, result, prefix) {
|
|
102
143
|
stopSpinner();
|
|
103
144
|
const label = formatPrefix(prefix);
|
|
@@ -120,13 +161,21 @@ function printToolResult(toolName, result, prefix) {
|
|
|
120
161
|
.join('\n');
|
|
121
162
|
console.log(lines);
|
|
122
163
|
}
|
|
164
|
+
/** Prints an error message to stderr in the theme's error color. */
|
|
123
165
|
function printError(message) {
|
|
124
166
|
stopSpinner();
|
|
125
167
|
console.error((0, theme_js_1.getTheme)().error(`Error: ${message}`));
|
|
126
168
|
}
|
|
169
|
+
/** Prints an informational message in the theme's muted color. */
|
|
127
170
|
function printInfo(message) {
|
|
128
171
|
console.log((0, theme_js_1.getTheme)().muted(message));
|
|
129
172
|
}
|
|
173
|
+
/**
|
|
174
|
+
* Prints a dimmed summary of a prior conversation for session-resume context.
|
|
175
|
+
*
|
|
176
|
+
* Each message is truncated to {@link MAX_REPLAY_LENGTH} characters.
|
|
177
|
+
* Tool-role messages are skipped.
|
|
178
|
+
*/
|
|
130
179
|
function printConversationReplay(messages) {
|
|
131
180
|
console.log((0, theme_js_1.getTheme)().dim(' Previous conversation:'));
|
|
132
181
|
for (const msg of messages) {
|
|
@@ -142,6 +191,15 @@ function printConversationReplay(messages) {
|
|
|
142
191
|
console.log((0, theme_js_1.getTheme)().dim(' ———'));
|
|
143
192
|
console.log();
|
|
144
193
|
}
|
|
194
|
+
/**
|
|
195
|
+
* Extracts the plain-text content from a {@link CoreMessage} for display formatting.
|
|
196
|
+
*
|
|
197
|
+
* Unlike {@link extractText} in `context.ts` (which is used for serialization and compression),
|
|
198
|
+
* this variant is scoped to output rendering only.
|
|
199
|
+
*
|
|
200
|
+
* @returns The joined text content, or `null` if the message has no text parts.
|
|
201
|
+
* @internal
|
|
202
|
+
*/
|
|
145
203
|
function extractText(msg) {
|
|
146
204
|
if (typeof msg.content === 'string')
|
|
147
205
|
return msg.content;
|
|
@@ -152,17 +210,20 @@ function extractText(msg) {
|
|
|
152
210
|
.map((p) => p.text);
|
|
153
211
|
return textParts.length > 0 ? textParts.join(' ') : null;
|
|
154
212
|
}
|
|
213
|
+
/** Prints a colored top-border line when a sub-agent begins executing a task. */
|
|
155
214
|
function printSubAgentStart(id, task) {
|
|
156
215
|
const prefixColors = (0, theme_js_1.getTheme)().prefixColors;
|
|
157
216
|
const colorFn = prefixColors[(id - 1) % prefixColors.length];
|
|
158
217
|
const displayTask = task.length > 80 ? task.slice(0, 80) + '…' : task;
|
|
159
218
|
console.log(colorFn(`┌─ sub:${id} — ${displayTask}`));
|
|
160
219
|
}
|
|
220
|
+
/** Prints a colored bottom-border line when a sub-agent finishes. */
|
|
161
221
|
function printSubAgentEnd(id) {
|
|
162
222
|
const prefixColors = (0, theme_js_1.getTheme)().prefixColors;
|
|
163
223
|
const colorFn = prefixColors[(id - 1) % prefixColors.length];
|
|
164
224
|
console.log(colorFn(`└─ sub:${id} done`));
|
|
165
225
|
}
|
|
226
|
+
/** Prints the REPL help menu listing all available slash commands. */
|
|
166
227
|
function printHelp() {
|
|
167
228
|
const t = (0, theme_js_1.getTheme)();
|
|
168
229
|
console.log(t.accent('\nCommands:'));
|
package/dist/output.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"output.js","sourceRoot":"","sources":["../src/output.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"output.js","sourceRoot":"","sources":["../src/output.ts"],"names":[],"mappings":"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"}
|
package/dist/paths.d.ts
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export declare const CONFIG_DIR: string;
|
|
2
|
+
export declare const DATA_DIR: string;
|
|
3
|
+
export declare const CACHE_DIR: string;
|
|
4
|
+
export declare const STATE_DIR: string;
|
|
5
|
+
export declare const LEGACY_DIR: string;
|
|
6
|
+
export declare const PREFS_PATH: string;
|
|
7
|
+
export declare const KEYS_PATH: string;
|
|
8
|
+
export declare const ENV_PATH: string;
|
|
9
|
+
export declare const MCP_CONFIG_PATH: string;
|
|
10
|
+
export declare const MEMORY_DIR: string;
|
|
11
|
+
export declare const RAG_DIR: string;
|
|
12
|
+
export declare const MEMORIES_FILE: string;
|
|
13
|
+
export declare const LAST_SESSION_FILE: string;
|
|
14
|
+
export declare const CRON_DIR: string;
|
|
15
|
+
export declare const CRON_JOBS_FILE: string;
|
|
16
|
+
export declare const CRON_ALERTS_DIR: string;
|
|
17
|
+
export declare const ROUTINES_DIR: string;
|
|
18
|
+
export declare const MODELS_DIR: string;
|
|
19
|
+
export declare const UPDATE_CACHE_PATH: string;
|
|
20
|
+
export declare const HISTORY_FILE: string;
|
|
21
|
+
export declare const LOGS_DIR: string;
|
|
22
|
+
export declare const CRON_PID_FILE: string;
|
|
23
|
+
export declare const CRON_LOG_FILE: string;
|
package/dist/paths.js
ADDED
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.CRON_LOG_FILE = exports.CRON_PID_FILE = exports.LOGS_DIR = exports.HISTORY_FILE = exports.UPDATE_CACHE_PATH = exports.MODELS_DIR = exports.ROUTINES_DIR = exports.CRON_ALERTS_DIR = exports.CRON_JOBS_FILE = exports.CRON_DIR = exports.LAST_SESSION_FILE = exports.MEMORIES_FILE = exports.RAG_DIR = exports.MEMORY_DIR = exports.MCP_CONFIG_PATH = exports.ENV_PATH = exports.KEYS_PATH = exports.PREFS_PATH = exports.LEGACY_DIR = exports.STATE_DIR = exports.CACHE_DIR = exports.DATA_DIR = exports.CONFIG_DIR = void 0;
|
|
37
|
+
const path = __importStar(require("node:path"));
|
|
38
|
+
const os = __importStar(require("node:os"));
|
|
39
|
+
const home = os.homedir();
|
|
40
|
+
const bernardHome = process.env.BERNARD_HOME;
|
|
41
|
+
function xdgBase(envVar, fallbackSuffix) {
|
|
42
|
+
if (bernardHome && path.isAbsolute(bernardHome))
|
|
43
|
+
return bernardHome;
|
|
44
|
+
const envVal = process.env[envVar];
|
|
45
|
+
// XDG spec: ignore relative paths
|
|
46
|
+
if (envVal && path.isAbsolute(envVal))
|
|
47
|
+
return envVal;
|
|
48
|
+
return path.join(home, fallbackSuffix);
|
|
49
|
+
}
|
|
50
|
+
const configBase = xdgBase('XDG_CONFIG_HOME', '.config');
|
|
51
|
+
const dataBase = xdgBase('XDG_DATA_HOME', path.join('.local', 'share'));
|
|
52
|
+
const cacheBase = xdgBase('XDG_CACHE_HOME', '.cache');
|
|
53
|
+
const stateBase = xdgBase('XDG_STATE_HOME', path.join('.local', 'state'));
|
|
54
|
+
// App-scoped roots
|
|
55
|
+
exports.CONFIG_DIR = path.join(configBase, 'bernard');
|
|
56
|
+
exports.DATA_DIR = path.join(dataBase, 'bernard');
|
|
57
|
+
exports.CACHE_DIR = path.join(cacheBase, 'bernard');
|
|
58
|
+
exports.STATE_DIR = path.join(stateBase, 'bernard');
|
|
59
|
+
exports.LEGACY_DIR = path.join(home, '.bernard');
|
|
60
|
+
// Config
|
|
61
|
+
exports.PREFS_PATH = path.join(exports.CONFIG_DIR, 'preferences.json');
|
|
62
|
+
exports.KEYS_PATH = path.join(exports.CONFIG_DIR, 'keys.json');
|
|
63
|
+
exports.ENV_PATH = path.join(exports.CONFIG_DIR, '.env');
|
|
64
|
+
exports.MCP_CONFIG_PATH = path.join(exports.CONFIG_DIR, 'mcp.json');
|
|
65
|
+
// Data
|
|
66
|
+
exports.MEMORY_DIR = path.join(exports.DATA_DIR, 'memory');
|
|
67
|
+
exports.RAG_DIR = path.join(exports.DATA_DIR, 'rag');
|
|
68
|
+
exports.MEMORIES_FILE = path.join(exports.RAG_DIR, 'memories.json');
|
|
69
|
+
exports.LAST_SESSION_FILE = path.join(exports.RAG_DIR, 'last-session.txt');
|
|
70
|
+
exports.CRON_DIR = path.join(exports.DATA_DIR, 'cron');
|
|
71
|
+
exports.CRON_JOBS_FILE = path.join(exports.CRON_DIR, 'jobs.json');
|
|
72
|
+
exports.CRON_ALERTS_DIR = path.join(exports.CRON_DIR, 'alerts');
|
|
73
|
+
exports.ROUTINES_DIR = path.join(exports.DATA_DIR, 'routines');
|
|
74
|
+
// Cache
|
|
75
|
+
exports.MODELS_DIR = path.join(exports.CACHE_DIR, 'models');
|
|
76
|
+
exports.UPDATE_CACHE_PATH = path.join(exports.CACHE_DIR, 'update-check.json');
|
|
77
|
+
// State
|
|
78
|
+
exports.HISTORY_FILE = path.join(exports.STATE_DIR, 'conversation-history.json');
|
|
79
|
+
exports.LOGS_DIR = path.join(exports.STATE_DIR, 'logs');
|
|
80
|
+
exports.CRON_PID_FILE = path.join(exports.STATE_DIR, 'cron-daemon.pid');
|
|
81
|
+
exports.CRON_LOG_FILE = path.join(exports.STATE_DIR, 'cron-daemon.log');
|
|
82
|
+
//# sourceMappingURL=paths.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../src/paths.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,2 +1,9 @@
|
|
|
1
1
|
import type { LanguageModel } from 'ai';
|
|
2
|
+
/**
|
|
3
|
+
* Return an AI SDK `LanguageModel` instance for the given provider and model name.
|
|
4
|
+
* @param provider - One of `"anthropic"`, `"openai"`, or `"xai"`.
|
|
5
|
+
* @param model - Provider-specific model identifier (e.g. `"claude-sonnet-4-20250514"`).
|
|
6
|
+
* @returns A ready-to-use `LanguageModel` backed by the requested provider.
|
|
7
|
+
* @throws {Error} If the provider string is not recognized.
|
|
8
|
+
*/
|
|
2
9
|
export declare function getModel(provider: string, model: string): LanguageModel;
|
package/dist/providers/index.js
CHANGED
|
@@ -4,6 +4,13 @@ exports.getModel = getModel;
|
|
|
4
4
|
const anthropic_1 = require("@ai-sdk/anthropic");
|
|
5
5
|
const openai_1 = require("@ai-sdk/openai");
|
|
6
6
|
const xai_1 = require("@ai-sdk/xai");
|
|
7
|
+
/**
|
|
8
|
+
* Return an AI SDK `LanguageModel` instance for the given provider and model name.
|
|
9
|
+
* @param provider - One of `"anthropic"`, `"openai"`, or `"xai"`.
|
|
10
|
+
* @param model - Provider-specific model identifier (e.g. `"claude-sonnet-4-20250514"`).
|
|
11
|
+
* @returns A ready-to-use `LanguageModel` backed by the requested provider.
|
|
12
|
+
* @throws {Error} If the provider string is not recognized.
|
|
13
|
+
*/
|
|
7
14
|
function getModel(provider, model) {
|
|
8
15
|
switch (provider) {
|
|
9
16
|
case 'anthropic':
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":";;AAYA,4BAWC;AAvBD,iDAA8C;AAC9C,2CAAwC;AACxC,qCAAkC;AAGlC;;;;;;GAMG;AACH,SAAgB,QAAQ,CAAC,QAAgB,EAAE,KAAa;IACtD,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,WAAW;YACd,OAAO,IAAA,qBAAS,EAAC,KAAK,CAAC,CAAC;QAC1B,KAAK,QAAQ;YACX,OAAO,IAAA,eAAM,EAAC,KAAK,CAAC,CAAC;QACvB,KAAK,KAAK;YACR,OAAO,IAAA,SAAG,EAAC,KAAK,CAAC,CAAC;QACpB;YACE,MAAM,IAAI,KAAK,CAAC,qBAAqB,QAAQ,qCAAqC,CAAC,CAAC;IACxF,CAAC;AACH,CAAC"}
|
|
@@ -1,5 +1,9 @@
|
|
|
1
|
+
/** Supported LLM provider identifiers. */
|
|
1
2
|
export type ProviderName = 'anthropic' | 'openai' | 'xai';
|
|
3
|
+
/** Provider and model pair used to instantiate an AI SDK `LanguageModel`. */
|
|
2
4
|
export interface ProviderConfig {
|
|
5
|
+
/** Which LLM provider to use. */
|
|
3
6
|
provider: ProviderName;
|
|
7
|
+
/** Model identifier passed to the provider SDK (e.g. "claude-sonnet-4-5-20250929"). */
|
|
4
8
|
model: string;
|
|
5
9
|
}
|
package/dist/rag-query.d.ts
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import type { CoreMessage } from 'ai';
|
|
2
2
|
import type { RAGSearchResult } from './rag.js';
|
|
3
|
+
/** Number of recent user messages (beyond the current input) to include in the RAG query. */
|
|
3
4
|
export declare const DEFAULT_WINDOW_SIZE = 2;
|
|
5
|
+
/** Maximum character length for the composed RAG search query. */
|
|
4
6
|
export declare const DEFAULT_MAX_QUERY_CHARS = 1000;
|
|
7
|
+
/** Similarity score bonus applied to facts that appeared in the previous turn's results. */
|
|
5
8
|
export declare const DEFAULT_STICKINESS_BOOST = 0.05;
|
|
6
9
|
/**
|
|
7
10
|
* Walk history backward and collect up to `maxMessages` user-role text strings.
|
|
@@ -9,8 +12,21 @@ export declare const DEFAULT_STICKINESS_BOOST = 0.05;
|
|
|
9
12
|
* Returns texts in chronological order (oldest first).
|
|
10
13
|
*/
|
|
11
14
|
export declare function extractRecentUserTexts(history: CoreMessage[], maxMessages?: number): string[];
|
|
15
|
+
/**
|
|
16
|
+
* Walk history backward and collect tool call names + compact args from assistant messages.
|
|
17
|
+
* Returns a comma-separated string in chronological order (oldest first).
|
|
18
|
+
*
|
|
19
|
+
* @param history - Conversation history to scan
|
|
20
|
+
* @param maxMessages - Maximum number of assistant messages to scan (default: 3)
|
|
21
|
+
* @param maxChars - Maximum character length for the returned string (default: 200)
|
|
22
|
+
*/
|
|
23
|
+
export declare function extractRecentToolContext(history: CoreMessage[], maxMessages?: number, maxChars?: number): string;
|
|
24
|
+
/** Options for {@link buildRAGQuery}. */
|
|
12
25
|
export interface BuildRAGQueryOptions {
|
|
26
|
+
/** Character budget for the composed query (default: 1000). */
|
|
13
27
|
maxQueryChars?: number;
|
|
28
|
+
/** Comma-separated tool context string (e.g. "shell(command=ls), memory"). */
|
|
29
|
+
toolContext?: string;
|
|
14
30
|
}
|
|
15
31
|
/**
|
|
16
32
|
* Build a RAG search query from the current user input plus recent history.
|
|
@@ -18,9 +34,13 @@ export interface BuildRAGQueryOptions {
|
|
|
18
34
|
* Truncates older messages first to stay within the character budget.
|
|
19
35
|
*/
|
|
20
36
|
export declare function buildRAGQuery(currentInput: string, recentUserTexts: string[], options?: BuildRAGQueryOptions): string;
|
|
37
|
+
/** Options for {@link applyStickiness}. */
|
|
21
38
|
export interface ApplyStickinessOptions {
|
|
39
|
+
/** Similarity score bonus for previously-seen facts (default: 0.05). */
|
|
22
40
|
boost?: number;
|
|
41
|
+
/** Max results to keep per domain after re-ranking (default: 5). */
|
|
23
42
|
topKPerDomain?: number;
|
|
43
|
+
/** Max total results after re-ranking (default: 15). */
|
|
24
44
|
maxResults?: number;
|
|
25
45
|
}
|
|
26
46
|
/**
|
package/dist/rag-query.js
CHANGED
|
@@ -2,11 +2,16 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.DEFAULT_STICKINESS_BOOST = exports.DEFAULT_MAX_QUERY_CHARS = exports.DEFAULT_WINDOW_SIZE = void 0;
|
|
4
4
|
exports.extractRecentUserTexts = extractRecentUserTexts;
|
|
5
|
+
exports.extractRecentToolContext = extractRecentToolContext;
|
|
5
6
|
exports.buildRAGQuery = buildRAGQuery;
|
|
6
7
|
exports.applyStickiness = applyStickiness;
|
|
7
8
|
const context_js_1 = require("./context.js");
|
|
9
|
+
const rag_js_1 = require("./rag.js");
|
|
10
|
+
/** Number of recent user messages (beyond the current input) to include in the RAG query. */
|
|
8
11
|
exports.DEFAULT_WINDOW_SIZE = 2;
|
|
12
|
+
/** Maximum character length for the composed RAG search query. */
|
|
9
13
|
exports.DEFAULT_MAX_QUERY_CHARS = 1000;
|
|
14
|
+
/** Similarity score bonus applied to facts that appeared in the previous turn's results. */
|
|
10
15
|
exports.DEFAULT_STICKINESS_BOOST = 0.05;
|
|
11
16
|
const BOUNDARY_PREFIXES = [
|
|
12
17
|
'[Context Summary',
|
|
@@ -36,6 +41,60 @@ function extractRecentUserTexts(history, maxMessages = exports.DEFAULT_WINDOW_SI
|
|
|
36
41
|
texts.reverse();
|
|
37
42
|
return texts;
|
|
38
43
|
}
|
|
44
|
+
/**
|
|
45
|
+
* Compact a tool call's args into a short summary string.
|
|
46
|
+
* Only includes the first key-value pair for brevity — tool calls
|
|
47
|
+
* are used as lightweight retrieval signals, not full records.
|
|
48
|
+
* Returns a "key=value" string, or empty string if args is empty/null.
|
|
49
|
+
*/
|
|
50
|
+
function compactArgs(args) {
|
|
51
|
+
if (!args || typeof args !== 'object')
|
|
52
|
+
return '';
|
|
53
|
+
const keys = Object.keys(args);
|
|
54
|
+
if (keys.length === 0)
|
|
55
|
+
return '';
|
|
56
|
+
const key = keys[0];
|
|
57
|
+
const raw = String(args[key] ?? '');
|
|
58
|
+
const value = raw.length > 60 ? raw.slice(0, 57) + '...' : raw;
|
|
59
|
+
return `${key}=${value}`;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Walk history backward and collect tool call names + compact args from assistant messages.
|
|
63
|
+
* Returns a comma-separated string in chronological order (oldest first).
|
|
64
|
+
*
|
|
65
|
+
* @param history - Conversation history to scan
|
|
66
|
+
* @param maxMessages - Maximum number of assistant messages to scan (default: 3)
|
|
67
|
+
* @param maxChars - Maximum character length for the returned string (default: 200)
|
|
68
|
+
*/
|
|
69
|
+
function extractRecentToolContext(history, maxMessages = 3, maxChars = 200) {
|
|
70
|
+
const entries = [];
|
|
71
|
+
let scanned = 0;
|
|
72
|
+
for (let i = history.length - 1; i >= 0 && scanned < maxMessages; i--) {
|
|
73
|
+
const msg = history[i];
|
|
74
|
+
if (msg.role !== 'assistant')
|
|
75
|
+
continue;
|
|
76
|
+
scanned++;
|
|
77
|
+
if (!Array.isArray(msg.content))
|
|
78
|
+
continue;
|
|
79
|
+
const msgEntries = [];
|
|
80
|
+
for (const part of msg.content) {
|
|
81
|
+
if (part.type === 'tool-call') {
|
|
82
|
+
const compact = compactArgs(part.args);
|
|
83
|
+
msgEntries.push(compact ? `${part.toolName}(${compact})` : part.toolName);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
entries.unshift(...msgEntries);
|
|
87
|
+
}
|
|
88
|
+
if (entries.length === 0)
|
|
89
|
+
return '';
|
|
90
|
+
let result = entries.join(', ');
|
|
91
|
+
if (result.length > maxChars) {
|
|
92
|
+
if (maxChars < 3)
|
|
93
|
+
return '';
|
|
94
|
+
result = result.slice(0, maxChars - 3) + '...';
|
|
95
|
+
}
|
|
96
|
+
return result;
|
|
97
|
+
}
|
|
39
98
|
/**
|
|
40
99
|
* Build a RAG search query from the current user input plus recent history.
|
|
41
100
|
* Current input is always at the end (transformers attend more to later tokens).
|
|
@@ -43,7 +102,8 @@ function extractRecentUserTexts(history, maxMessages = exports.DEFAULT_WINDOW_SI
|
|
|
43
102
|
*/
|
|
44
103
|
function buildRAGQuery(currentInput, recentUserTexts, options) {
|
|
45
104
|
const maxChars = options?.maxQueryChars ?? exports.DEFAULT_MAX_QUERY_CHARS;
|
|
46
|
-
|
|
105
|
+
const toolContext = options?.toolContext;
|
|
106
|
+
if (recentUserTexts.length === 0 && !toolContext)
|
|
47
107
|
return currentInput.slice(0, maxChars);
|
|
48
108
|
// Always preserve current input (truncate if alone it exceeds budget)
|
|
49
109
|
const current = currentInput.slice(0, maxChars);
|
|
@@ -60,6 +120,12 @@ function buildRAGQuery(currentInput, recentUserTexts, options) {
|
|
|
60
120
|
parts.unshift(truncated);
|
|
61
121
|
remaining -= truncated.length + 2; // -2 for ". " separator between parts
|
|
62
122
|
}
|
|
123
|
+
// Tool context is lowest-priority: only inserted if remaining budget > 10 chars
|
|
124
|
+
if (toolContext && remaining > 10) {
|
|
125
|
+
const wrapped = `[tools: ${toolContext}]`;
|
|
126
|
+
const truncatedTool = wrapped.slice(0, remaining);
|
|
127
|
+
parts.unshift(truncatedTool);
|
|
128
|
+
}
|
|
63
129
|
return [...parts, current].join('. ');
|
|
64
130
|
}
|
|
65
131
|
/**
|
|
@@ -71,8 +137,8 @@ function applyStickiness(currentResults, previousFacts, options) {
|
|
|
71
137
|
if (previousFacts.size === 0)
|
|
72
138
|
return currentResults;
|
|
73
139
|
const boost = options?.boost ?? exports.DEFAULT_STICKINESS_BOOST;
|
|
74
|
-
const topKPerDomain = options?.topKPerDomain ??
|
|
75
|
-
const maxResults = options?.maxResults ??
|
|
140
|
+
const topKPerDomain = options?.topKPerDomain ?? rag_js_1.DEFAULT_TOP_K_PER_DOMAIN;
|
|
141
|
+
const maxResults = options?.maxResults ?? rag_js_1.DEFAULT_MAX_RESULTS;
|
|
76
142
|
// Apply boost
|
|
77
143
|
const boosted = currentResults.map((r) => ({
|
|
78
144
|
...r,
|
package/dist/rag-query.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rag-query.js","sourceRoot":"","sources":["../src/rag-query.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"rag-query.js","sourceRoot":"","sources":["../src/rag-query.ts"],"names":[],"mappings":"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"}
|
package/dist/rag-worker.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rag-worker.js","sourceRoot":"","sources":["../src/rag-worker.ts"],"names":[],"mappings":";;AAEA;;;;;;;GAOG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,4CAA8B;AAC9B,2CAAyC;AACzC,6CAAkD;AAClD,qCAAoC;
|
|
1
|
+
{"version":3,"file":"rag-worker.js","sourceRoot":"","sources":["../src/rag-worker.ts"],"names":[],"mappings":";;AAEA;;;;;;;GAOG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,4CAA8B;AAC9B,2CAAyC;AACzC,6CAAkD;AAClD,qCAAoC;AAYpC,KAAK,UAAU,IAAI;IACjB,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjC,IAAI,CAAC,QAAQ;QAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAE/B,+BAA+B;IAC/B,IAAI,OAAoB,CAAC;IACzB,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC/C,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAgB,CAAC;IAC3C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,UAAU,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QAC/D,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QACxB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,iFAAiF;IACjF,MAAM,MAAM,GAAG,IAAA,sBAAU,EAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;IAEhF,0CAA0C;IAC1C,MAAM,WAAW,GAAG,MAAM,IAAA,+BAAkB,EAAC,OAAO,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IAEzE,+CAA+C;IAC/C,MAAM,UAAU,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAC7E,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;QACnB,MAAM,QAAQ,GAAG,IAAI,iBAAQ,EAAE,CAAC;QAChC,KAAK,MAAM,EAAE,IAAI,WAAW,EAAE,CAAC;YAC7B,MAAM,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC;QACvD,CAAC;IACH,CAAC;IAED,qBAAqB;IACrB,IAAI,CAAC;QACH,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IAC1B,CAAC;IAAC,MAAM,CAAC;QACP,oCAAoC;IACtC,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC"}
|
package/dist/rag.d.ts
CHANGED
|
@@ -1,19 +1,35 @@
|
|
|
1
|
+
/** Maximum results returned per domain before merging. */
|
|
2
|
+
export declare const DEFAULT_TOP_K_PER_DOMAIN = 5;
|
|
3
|
+
/** Maximum total results returned from a search. */
|
|
4
|
+
export declare const DEFAULT_MAX_RESULTS = 15;
|
|
5
|
+
/** A single stored memory with its embedding vector and lifecycle metadata. */
|
|
1
6
|
export interface RAGMemory {
|
|
7
|
+
/** Unique identifier (timestamp + random suffix). */
|
|
2
8
|
id: string;
|
|
9
|
+
/** The plain-text fact extracted from conversation. */
|
|
3
10
|
fact: string;
|
|
11
|
+
/** Pre-computed embedding vector for similarity search. */
|
|
4
12
|
embedding: number[];
|
|
13
|
+
/** Origin of the fact, e.g. "compression" or "user". */
|
|
5
14
|
source: string;
|
|
15
|
+
/** Domain category this fact belongs to (e.g. "general", "tool-usage"). */
|
|
6
16
|
domain: string;
|
|
17
|
+
/** ISO 8601 timestamp when the memory was created. */
|
|
7
18
|
createdAt: string;
|
|
19
|
+
/** Number of times this memory has been returned in search results. */
|
|
8
20
|
accessCount: number;
|
|
21
|
+
/** ISO 8601 timestamp of the most recent search hit. */
|
|
9
22
|
lastAccessed?: string;
|
|
23
|
+
/** ISO 8601 timestamp after which the memory is eligible for expiration pruning. */
|
|
10
24
|
expiresAt?: string;
|
|
11
25
|
}
|
|
26
|
+
/** A search result containing the matched fact, its similarity score, and domain. */
|
|
12
27
|
export interface RAGSearchResult {
|
|
13
28
|
fact: string;
|
|
14
29
|
similarity: number;
|
|
15
30
|
domain: string;
|
|
16
31
|
}
|
|
32
|
+
/** Extended search result that includes the memory ID and lifecycle metadata. */
|
|
17
33
|
export interface RAGSearchResultWithId {
|
|
18
34
|
id: string;
|
|
19
35
|
fact: string;
|
|
@@ -22,13 +38,24 @@ export interface RAGSearchResultWithId {
|
|
|
22
38
|
createdAt: string;
|
|
23
39
|
accessCount: number;
|
|
24
40
|
}
|
|
41
|
+
/** Optional configuration overrides for {@link RAGStore}. All fields fall back to sensible defaults. */
|
|
25
42
|
export interface RAGStoreConfig {
|
|
43
|
+
/** Max results per domain before merging (default: 5). */
|
|
26
44
|
topKPerDomain?: number;
|
|
45
|
+
/** Max total results from a search (default: 15). */
|
|
27
46
|
maxResults?: number;
|
|
47
|
+
/** Minimum cosine similarity to include a result (default: 0.35). */
|
|
28
48
|
similarityThreshold?: number;
|
|
49
|
+
/** Hard cap on stored memories (default: 5000). */
|
|
29
50
|
maxMemories?: number;
|
|
51
|
+
/** Time-to-live in days for new memories (default: 90). */
|
|
30
52
|
ragTtlDays?: number;
|
|
31
53
|
}
|
|
54
|
+
/**
|
|
55
|
+
* Disk-backed vector store for long-term conversational memory.
|
|
56
|
+
* Stores facts as embeddings, supports similarity search with per-domain top-k ranking,
|
|
57
|
+
* and manages memory lifecycle via TTL-based expiration and capacity pruning.
|
|
58
|
+
*/
|
|
32
59
|
export declare class RAGStore {
|
|
33
60
|
private memories;
|
|
34
61
|
private topKPerDomain;
|