hoomanjs 1.28.2 → 1.29.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 +32 -71
- package/dist/acp/acp-agent.js +1 -1
- package/dist/acp/acp-agent.js.map +1 -1
- package/dist/acp/sessions/{config-options.d.ts → options.d.ts} +0 -2
- package/dist/acp/sessions/{config-options.js → options.js} +3 -52
- package/dist/acp/sessions/options.js.map +1 -0
- package/dist/acp/utils/tool-kind.js +3 -9
- package/dist/acp/utils/tool-kind.js.map +1 -1
- package/dist/acp/utils/tool-locations.js +0 -2
- package/dist/acp/utils/tool-locations.js.map +1 -1
- package/dist/chat/app.js +1 -1
- package/dist/chat/app.js.map +1 -1
- package/dist/chat/index.js +1 -1
- package/dist/chat/index.js.map +1 -1
- package/dist/configure/app.js +227 -72
- package/dist/configure/app.js.map +1 -1
- package/dist/configure/types.d.ts +8 -0
- package/dist/core/agent/index.d.ts +1 -1
- package/dist/core/agent/index.js +10 -9
- package/dist/core/agent/index.js.map +1 -1
- package/dist/core/agents/registry.js +1 -1
- package/dist/core/agents/registry.js.map +1 -1
- package/dist/core/config.d.ts +5 -24
- package/dist/core/config.js +8 -43
- package/dist/core/config.js.map +1 -1
- package/dist/core/context/flat-file-storage.js.map +1 -0
- package/dist/core/{memory/stm → context}/index.js +1 -1
- package/dist/core/context/index.js.map +1 -0
- package/dist/core/{memory/stm → context}/lazy-session-manager.js +1 -1
- package/dist/core/context/lazy-session-manager.js.map +1 -0
- package/dist/core/inference/embedder.d.ts +26 -0
- package/dist/core/inference/embedder.js +85 -0
- package/dist/core/inference/embedder.js.map +1 -0
- package/dist/core/inference/index.d.ts +12 -0
- package/dist/core/inference/index.js +20 -0
- package/dist/core/inference/index.js.map +1 -0
- package/dist/core/inference/loader.d.ts +8 -0
- package/dist/core/inference/loader.js +85 -0
- package/dist/core/inference/loader.js.map +1 -0
- package/dist/core/memory/brain.d.ts +24 -0
- package/dist/core/memory/brain.js +133 -0
- package/dist/core/memory/brain.js.map +1 -0
- package/dist/core/memory/database.d.ts +4 -0
- package/dist/core/memory/database.js +87 -0
- package/dist/core/memory/database.js.map +1 -0
- package/dist/core/memory/index.d.ts +5 -3
- package/dist/core/memory/index.js +3 -2
- package/dist/core/memory/index.js.map +1 -1
- package/dist/core/memory/tools.d.ts +16 -0
- package/dist/core/memory/tools.js +105 -0
- package/dist/core/memory/tools.js.map +1 -0
- package/dist/core/memory/types.d.ts +11 -0
- package/dist/core/memory/{ltm/types.js.map → types.js.map} +1 -1
- package/dist/core/models/index.js +1 -3
- package/dist/core/models/index.js.map +1 -1
- package/dist/core/models/openai.js +9 -0
- package/dist/core/models/openai.js.map +1 -0
- package/dist/core/prompts/static/memory.md +125 -0
- package/dist/core/prompts/static/wiki.md +15 -71
- package/dist/core/prompts/system.d.ts +4 -0
- package/dist/core/prompts/system.js +40 -9
- package/dist/core/prompts/system.js.map +1 -1
- package/dist/core/skills/built-in/hooman-config/SKILL.md +14 -50
- package/dist/core/state/tool-approvals.js +4 -15
- package/dist/core/state/tool-approvals.js.map +1 -1
- package/dist/core/tools/index.d.ts +0 -1
- package/dist/core/tools/index.js +0 -1
- package/dist/core/tools/index.js.map +1 -1
- package/dist/core/utils/hashing.d.ts +1 -0
- package/dist/core/utils/hashing.js +5 -0
- package/dist/core/utils/hashing.js.map +1 -0
- package/dist/core/utils/paths.d.ts +3 -0
- package/dist/core/utils/paths.js +11 -24
- package/dist/core/utils/paths.js.map +1 -1
- package/dist/core/utils/strands-usage-accumulate.js.map +1 -0
- package/dist/core/wiki/converters.d.ts +12 -0
- package/dist/core/wiki/converters.js +73 -0
- package/dist/core/wiki/converters.js.map +1 -0
- package/dist/core/wiki/database.d.ts +38 -0
- package/dist/core/wiki/database.js +173 -0
- package/dist/core/wiki/database.js.map +1 -0
- package/dist/core/wiki/index.d.ts +7 -0
- package/dist/core/wiki/index.js +5 -0
- package/dist/core/wiki/index.js.map +1 -0
- package/dist/core/wiki/storage.d.ts +35 -0
- package/dist/core/wiki/storage.js +196 -0
- package/dist/core/wiki/storage.js.map +1 -0
- package/dist/core/wiki/tools.d.ts +5 -0
- package/dist/core/wiki/tools.js +32 -0
- package/dist/core/wiki/tools.js.map +1 -0
- package/dist/index.d.ts +11 -18
- package/dist/index.js +8 -13
- package/dist/index.js.map +1 -1
- package/package.json +13 -8
- package/dist/acp/sessions/config-options.js.map +0 -1
- package/dist/core/memory/ltm/embed.d.ts +0 -16
- package/dist/core/memory/ltm/embed.js +0 -49
- package/dist/core/memory/ltm/embed.js.map +0 -1
- package/dist/core/memory/ltm/index.d.ts +0 -3
- package/dist/core/memory/ltm/index.js +0 -3
- package/dist/core/memory/ltm/index.js.map +0 -1
- package/dist/core/memory/ltm/store.d.ts +0 -20
- package/dist/core/memory/ltm/store.js +0 -271
- package/dist/core/memory/ltm/store.js.map +0 -1
- package/dist/core/memory/ltm/tools.d.ts +0 -21
- package/dist/core/memory/ltm/tools.js +0 -127
- package/dist/core/memory/ltm/tools.js.map +0 -1
- package/dist/core/memory/ltm/types.d.ts +0 -79
- package/dist/core/memory/ltm/utils.d.ts +0 -40
- package/dist/core/memory/ltm/utils.js +0 -145
- package/dist/core/memory/ltm/utils.js.map +0 -1
- package/dist/core/memory/stm/flat-file-storage.js.map +0 -1
- package/dist/core/memory/stm/index.js.map +0 -1
- package/dist/core/memory/stm/lazy-session-manager.js.map +0 -1
- package/dist/core/models/bifrost/bifrost-base-url.d.ts +0 -6
- package/dist/core/models/bifrost/bifrost-base-url.js +0 -27
- package/dist/core/models/bifrost/bifrost-base-url.js.map +0 -1
- package/dist/core/models/bifrost/index.d.ts +0 -11
- package/dist/core/models/bifrost/index.js +0 -29
- package/dist/core/models/bifrost/index.js.map +0 -1
- package/dist/core/models/bifrost/strands-bifrost.d.ts +0 -14
- package/dist/core/models/bifrost/strands-bifrost.js +0 -168
- package/dist/core/models/bifrost/strands-bifrost.js.map +0 -1
- package/dist/core/models/openai/index.js +0 -13
- package/dist/core/models/openai/index.js.map +0 -1
- package/dist/core/models/openai/kimi-reasoning-wire.d.ts +0 -40
- package/dist/core/models/openai/kimi-reasoning-wire.js +0 -109
- package/dist/core/models/openai/kimi-reasoning-wire.js.map +0 -1
- package/dist/core/models/openai/openai-stream-shims.d.ts +0 -13
- package/dist/core/models/openai/openai-stream-shims.js +0 -48
- package/dist/core/models/openai/openai-stream-shims.js.map +0 -1
- package/dist/core/models/tensorzero/index.d.ts +0 -12
- package/dist/core/models/tensorzero/index.js +0 -17
- package/dist/core/models/tensorzero/index.js.map +0 -1
- package/dist/core/models/tensorzero/openai-chat-request-shims.d.ts +0 -25
- package/dist/core/models/tensorzero/openai-chat-request-shims.js +0 -45
- package/dist/core/models/tensorzero/openai-chat-request-shims.js.map +0 -1
- package/dist/core/models/tensorzero/strands-tensorzero.d.ts +0 -14
- package/dist/core/models/tensorzero/strands-tensorzero.js +0 -140
- package/dist/core/models/tensorzero/strands-tensorzero.js.map +0 -1
- package/dist/core/prompts/static/ltm.md +0 -50
- package/dist/core/tools/wiki.d.ts +0 -11
- package/dist/core/tools/wiki.js +0 -560
- package/dist/core/tools/wiki.js.map +0 -1
- package/dist/lib/strands-usage-accumulate.js.map +0 -1
- /package/dist/core/{memory/stm → context}/flat-file-storage.d.ts +0 -0
- /package/dist/core/{memory/stm → context}/flat-file-storage.js +0 -0
- /package/dist/core/{memory/stm → context}/index.d.ts +0 -0
- /package/dist/core/{memory/stm → context}/lazy-session-manager.d.ts +0 -0
- /package/dist/core/memory/{ltm/types.js → types.js} +0 -0
- /package/dist/core/models/{openai/index.d.ts → openai.d.ts} +0 -0
- /package/dist/{lib → core/utils}/strands-usage-accumulate.d.ts +0 -0
- /package/dist/{lib → core/utils}/strands-usage-accumulate.js +0 -0
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { closeSync, existsSync, mkdirSync, openSync, readSync, statSync, unlinkSync, } from "node:fs";
|
|
2
|
+
import { getLlama, resolveModelFile, LlamaLogLevel, } from "node-llama-cpp";
|
|
3
|
+
const GGUF_MAGIC = Buffer.from("GGUF");
|
|
4
|
+
function gpu() {
|
|
5
|
+
if (process.env.CI) {
|
|
6
|
+
return false;
|
|
7
|
+
}
|
|
8
|
+
const raw = process.env.HOOMAN_LLAMA_GPU?.trim() ?? "";
|
|
9
|
+
const normalized = raw.toLowerCase();
|
|
10
|
+
if (!normalized) {
|
|
11
|
+
return "auto";
|
|
12
|
+
}
|
|
13
|
+
if (["false", "off", "none", "disable", "disabled", "0"].includes(normalized)) {
|
|
14
|
+
return false;
|
|
15
|
+
}
|
|
16
|
+
if (normalized === "metal" ||
|
|
17
|
+
normalized === "vulkan" ||
|
|
18
|
+
normalized === "cuda") {
|
|
19
|
+
return normalized;
|
|
20
|
+
}
|
|
21
|
+
return "auto";
|
|
22
|
+
}
|
|
23
|
+
function maxTokens() {
|
|
24
|
+
const raw = process.env.HOOMAN_EMBED_CONTEXT_SIZE?.trim() ?? "";
|
|
25
|
+
const v = Number.parseInt(raw, 10);
|
|
26
|
+
if (Number.isFinite(v) && v > 0) {
|
|
27
|
+
return v;
|
|
28
|
+
}
|
|
29
|
+
return 2048;
|
|
30
|
+
}
|
|
31
|
+
function validate(file, uri) {
|
|
32
|
+
if (!existsSync(file)) {
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
const fd = openSync(file, "r");
|
|
36
|
+
const sniff = Buffer.alloc(512);
|
|
37
|
+
try {
|
|
38
|
+
readSync(fd, sniff, 0, 512, 0);
|
|
39
|
+
}
|
|
40
|
+
finally {
|
|
41
|
+
closeSync(fd);
|
|
42
|
+
}
|
|
43
|
+
const header = sniff.subarray(0, 4);
|
|
44
|
+
if (!header.equals(GGUF_MAGIC)) {
|
|
45
|
+
const got = header.toString("utf-8");
|
|
46
|
+
const sizeKb = (statSync(file).size / 1024).toFixed(0);
|
|
47
|
+
unlinkSync(file);
|
|
48
|
+
throw new Error(`Embed model is not valid GGUF (expected "GGUF", got "${got}", ${sizeKb} KB).\n` +
|
|
49
|
+
`Model: ${uri}`);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
export async function load(dir, uri) {
|
|
53
|
+
if (!existsSync(dir)) {
|
|
54
|
+
mkdirSync(dir, { recursive: true });
|
|
55
|
+
}
|
|
56
|
+
const file = await resolveModelFile(uri, dir);
|
|
57
|
+
validate(file, uri);
|
|
58
|
+
const mode = gpu();
|
|
59
|
+
const loadLlama = async (gpu) => getLlama({
|
|
60
|
+
build: "never",
|
|
61
|
+
logLevel: LlamaLogLevel.error,
|
|
62
|
+
gpu,
|
|
63
|
+
});
|
|
64
|
+
let llama;
|
|
65
|
+
if (mode === false) {
|
|
66
|
+
llama = await loadLlama(false);
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
try {
|
|
70
|
+
llama = await loadLlama(mode);
|
|
71
|
+
}
|
|
72
|
+
catch {
|
|
73
|
+
llama = await loadLlama(false);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
const model = await llama.loadModel({ modelPath: file });
|
|
77
|
+
const trained = model.trainContextSize;
|
|
78
|
+
const tokens = maxTokens();
|
|
79
|
+
const contextSize = typeof trained === "number" && Number.isFinite(trained) && trained > 0
|
|
80
|
+
? Math.max(1, Math.min(tokens, trained))
|
|
81
|
+
: tokens;
|
|
82
|
+
const context = await model.createEmbeddingContext({ contextSize });
|
|
83
|
+
return { llama, model, context, contextSize };
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../../src/core/inference/loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { GgufEmbedder } from "../inference/index.js";
|
|
2
|
+
import type { Memory, MemoryType } from "./types.js";
|
|
3
|
+
/**
|
|
4
|
+
* Small semantic memory store: sqlite rows + sqlite-vec embeddings.
|
|
5
|
+
*/
|
|
6
|
+
export declare class Brain {
|
|
7
|
+
private readonly embedder;
|
|
8
|
+
private readonly db;
|
|
9
|
+
constructor(path: string, embedder: GgufEmbedder);
|
|
10
|
+
warmup(): Promise<void>;
|
|
11
|
+
/**
|
|
12
|
+
* Store text with arbitrary JSON-serializable metadata; returns the new row id.
|
|
13
|
+
*/
|
|
14
|
+
memorize(scope: string, content: string, type: MemoryType, metadata?: Record<string, unknown>): Promise<string>;
|
|
15
|
+
/**
|
|
16
|
+
* Search: vector retrieval when `q` is non-empty; otherwise lists recent memories.
|
|
17
|
+
* Only non-archived rows in `scope` participate.
|
|
18
|
+
* When `types` is non-empty, only rows whose `type` is in that list are returned.
|
|
19
|
+
*/
|
|
20
|
+
search(scope: string, q: string, types?: MemoryType[], limit?: number): Promise<Memory[]>;
|
|
21
|
+
/** Mark a memory archived and remove it from the vector index. Only affects rows in `scope`. */
|
|
22
|
+
archive(scope: string, id: string): boolean;
|
|
23
|
+
close(): Promise<void>;
|
|
24
|
+
}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
import crypto from "node:crypto";
|
|
2
|
+
import { embed, rerank } from "../inference/index.js";
|
|
3
|
+
import { open, prepare } from "./database.js";
|
|
4
|
+
const VEC_K_MULTIPLIER = 5;
|
|
5
|
+
function toMemory(row, distance) {
|
|
6
|
+
let metadata = {};
|
|
7
|
+
try {
|
|
8
|
+
metadata = JSON.parse(row.metadata_json);
|
|
9
|
+
}
|
|
10
|
+
catch {
|
|
11
|
+
metadata = {};
|
|
12
|
+
}
|
|
13
|
+
const dist = typeof distance === "number" && Number.isFinite(distance) ? distance : null;
|
|
14
|
+
return {
|
|
15
|
+
id: row.id,
|
|
16
|
+
content: row.content,
|
|
17
|
+
type: row.type,
|
|
18
|
+
metadata,
|
|
19
|
+
archived: row.archived === 1,
|
|
20
|
+
createdAt: new Date(row.created_at_ms),
|
|
21
|
+
distance: dist,
|
|
22
|
+
score: dist != null ? Math.max(0, Math.min(1, 1 - dist)) : null,
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Small semantic memory store: sqlite rows + sqlite-vec embeddings.
|
|
27
|
+
*/
|
|
28
|
+
export class Brain {
|
|
29
|
+
embedder;
|
|
30
|
+
db;
|
|
31
|
+
constructor(path, embedder) {
|
|
32
|
+
this.embedder = embedder;
|
|
33
|
+
this.db = open(path);
|
|
34
|
+
}
|
|
35
|
+
async warmup() {
|
|
36
|
+
await this.embedder.warmup();
|
|
37
|
+
const row = this.db
|
|
38
|
+
.prepare(`SELECT 1 AS ok FROM memories LIMIT 1`)
|
|
39
|
+
.get();
|
|
40
|
+
if (!row) {
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
const probe = await this.embedder.embedQuery("__probe__");
|
|
44
|
+
prepare(this.db, this.embedder.resolvedModelUri, probe.length);
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Store text with arbitrary JSON-serializable metadata; returns the new row id.
|
|
48
|
+
*/
|
|
49
|
+
async memorize(scope, content, type, metadata = {}) {
|
|
50
|
+
const id = crypto.randomUUID();
|
|
51
|
+
const title = typeof metadata.title === "string" ? metadata.title : undefined;
|
|
52
|
+
const embedding = await this.embedder.embedDocument(content, title);
|
|
53
|
+
prepare(this.db, this.embedder.resolvedModelUri, embedding.length);
|
|
54
|
+
const stmt1 = this.db.prepare(`INSERT INTO memories (id, scope, content, type, metadata_json, archived, created_at_ms)
|
|
55
|
+
VALUES (?, ?, ?, ?, ?, 0, ?)`);
|
|
56
|
+
const stmt2 = this.db.prepare(`INSERT INTO brain_memory_vec (memory_id, embedding) VALUES (?, ?)`);
|
|
57
|
+
this.db.transaction(() => {
|
|
58
|
+
stmt1.run(id, scope, content, type, JSON.stringify(metadata), Date.now());
|
|
59
|
+
stmt2.run(id, embedding);
|
|
60
|
+
})();
|
|
61
|
+
return id;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Search: vector retrieval when `q` is non-empty; otherwise lists recent memories.
|
|
65
|
+
* Only non-archived rows in `scope` participate.
|
|
66
|
+
* When `types` is non-empty, only rows whose `type` is in that list are returned.
|
|
67
|
+
*/
|
|
68
|
+
async search(scope, q, types, limit = 10) {
|
|
69
|
+
const n = Number.isFinite(limit) && limit > 0 ? Math.floor(limit) : 10;
|
|
70
|
+
const typeSet = types != null && types.length > 0 ? new Set(types) : null;
|
|
71
|
+
if (!q.trim()) {
|
|
72
|
+
if (typeSet) {
|
|
73
|
+
const tList = [...typeSet];
|
|
74
|
+
const ph = tList.map(() => "?").join(",");
|
|
75
|
+
const rows = this.db
|
|
76
|
+
.prepare(`SELECT id, content, type, metadata_json, archived, created_at_ms
|
|
77
|
+
FROM memories
|
|
78
|
+
WHERE scope = ? AND archived = 0 AND type IN (${ph})
|
|
79
|
+
ORDER BY created_at_ms DESC LIMIT ?`)
|
|
80
|
+
.all(scope, ...tList, n);
|
|
81
|
+
return rows.map((row) => toMemory(row, null));
|
|
82
|
+
}
|
|
83
|
+
const rows = this.db
|
|
84
|
+
.prepare(`SELECT id, content, type, metadata_json, archived, created_at_ms
|
|
85
|
+
FROM memories WHERE scope = ? AND archived = 0 ORDER BY created_at_ms DESC LIMIT ?`)
|
|
86
|
+
.all(scope, n);
|
|
87
|
+
return rows.map((row) => toMemory(row, null));
|
|
88
|
+
}
|
|
89
|
+
const embedding = Float32Array.from(await embed(this.embedder, q, "query"));
|
|
90
|
+
prepare(this.db, this.embedder.resolvedModelUri, embedding.length);
|
|
91
|
+
const kMult = typeSet ? VEC_K_MULTIPLIER * 4 : VEC_K_MULTIPLIER;
|
|
92
|
+
const k = Math.max(1, n * kMult);
|
|
93
|
+
const hits = this.db
|
|
94
|
+
.prepare(`SELECT memory_id, distance FROM brain_memory_vec WHERE embedding MATCH ? AND k = ?`)
|
|
95
|
+
.all(embedding, k);
|
|
96
|
+
if (hits.length === 0) {
|
|
97
|
+
return [];
|
|
98
|
+
}
|
|
99
|
+
const byId = new Map(hits.map((h) => [h.memory_id, h.distance]));
|
|
100
|
+
const ids = hits.map((h) => h.memory_id);
|
|
101
|
+
const placeholders = ids.map(() => "?").join(",");
|
|
102
|
+
const rows = this.db
|
|
103
|
+
.prepare(`SELECT id, content, type, metadata_json, archived, created_at_ms
|
|
104
|
+
FROM memories WHERE archived = 0 AND scope = ? AND id IN (${placeholders})`)
|
|
105
|
+
.all(scope, ...ids);
|
|
106
|
+
const candidates = rows.map((row) => toMemory(row, byId.get(row.id) ?? null));
|
|
107
|
+
const ranked = rerank(q, candidates);
|
|
108
|
+
const filtered = typeSet
|
|
109
|
+
? ranked.filter((m) => typeSet.has(m.type))
|
|
110
|
+
: ranked;
|
|
111
|
+
return filtered.slice(0, n);
|
|
112
|
+
}
|
|
113
|
+
/** Mark a memory archived and remove it from the vector index. Only affects rows in `scope`. */
|
|
114
|
+
archive(scope, id) {
|
|
115
|
+
const row = this.db
|
|
116
|
+
.prepare(`SELECT id, content, type, metadata_json, archived, created_at_ms
|
|
117
|
+
FROM memories WHERE id = ? AND scope = ? AND archived = 0`)
|
|
118
|
+
.get(id, scope);
|
|
119
|
+
if (!row) {
|
|
120
|
+
return false;
|
|
121
|
+
}
|
|
122
|
+
this.db.prepare(`DELETE FROM brain_memory_vec WHERE memory_id = ?`).run(id);
|
|
123
|
+
this.db
|
|
124
|
+
.prepare(`UPDATE memories SET archived = 1 WHERE id = ? AND scope = ?`)
|
|
125
|
+
.run(id, scope);
|
|
126
|
+
return true;
|
|
127
|
+
}
|
|
128
|
+
async close() {
|
|
129
|
+
await this.embedder.dispose();
|
|
130
|
+
this.db.close();
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
//# sourceMappingURL=brain.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"brain.js","sourceRoot":"","sources":["../../../src/core/memory/brain.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,KAAK,EAAgB,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAGpE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAE9C,MAAM,gBAAgB,GAAG,CAAC,CAAC;AAE3B,SAAS,QAAQ,CACf,GAOC,EACD,QAAwB;IAExB,IAAI,QAAQ,GAA4B,EAAE,CAAC;IAC3C,IAAI,CAAC;QACH,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,CAA4B,CAAC;IACtE,CAAC;IAAC,MAAM,CAAC;QACP,QAAQ,GAAG,EAAE,CAAC;IAChB,CAAC;IACD,MAAM,IAAI,GACR,OAAO,QAAQ,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;IAC9E,OAAO;QACL,EAAE,EAAE,GAAG,CAAC,EAAE;QACV,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,QAAQ;QACR,QAAQ,EAAE,GAAG,CAAC,QAAQ,KAAK,CAAC;QAC5B,SAAS,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC;QACtC,QAAQ,EAAE,IAAI;QACd,KAAK,EAAE,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI;KAChE,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,OAAO,KAAK;IAKG;IAJF,EAAE,CAAS;IAE5B,YACE,IAAY,EACK,QAAsB;QAAtB,aAAQ,GAAR,QAAQ,CAAc;QAEvC,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;IACvB,CAAC;IAEM,KAAK,CAAC,MAAM;QACjB,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;QAC7B,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE;aAChB,OAAO,CAAC,sCAAsC,CAAC;aAC/C,GAAG,EAAgC,CAAC;QACvC,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,OAAO;QACT,CAAC;QACD,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;QAC1D,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,gBAAgB,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IACjE,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,QAAQ,CACnB,KAAa,EACb,OAAe,EACf,IAAgB,EAChB,WAAoC,EAAE;QAEtC,MAAM,EAAE,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;QAC/B,MAAM,KAAK,GACT,OAAO,QAAQ,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;QAClE,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QACpE,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,gBAAgB,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;QAEnE,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAC3B;oCAC8B,CAC/B,CAAC;QACF,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAC3B,mEAAmE,CACpE,CAAC;QACF,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE;YACvB,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;YAC1E,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;QAC3B,CAAC,CAAC,EAAE,CAAC;QAEL,OAAO,EAAE,CAAC;IACZ,CAAC;IAED;;;;OAIG;IACI,KAAK,CAAC,MAAM,CACjB,KAAa,EACb,CAAS,EACT,KAAoB,EACpB,QAAgB,EAAE;QAElB,MAAM,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACvE,MAAM,OAAO,GAAG,KAAK,IAAI,IAAI,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAE1E,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;YACd,IAAI,OAAO,EAAE,CAAC;gBACZ,MAAM,KAAK,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC;gBAC3B,MAAM,EAAE,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE;qBACjB,OAAO,CACN;;6DAEiD,EAAE;iDACd,CACtC;qBACA,GAAG,CAAC,KAAK,EAAE,GAAG,KAAK,EAAE,CAAC,CAOtB,CAAC;gBAEJ,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;YAChD,CAAC;YAED,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE;iBACjB,OAAO,CACN;gGACsF,CACvF;iBACA,GAAG,CAAC,KAAK,EAAE,CAAC,CAOZ,CAAC;YAEJ,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;QAChD,CAAC;QAED,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;QAC5E,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,gBAAgB,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;QACnE,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,gBAAgB,GAAG,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC;QAChE,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC;QACjC,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE;aACjB,OAAO,CACN,oFAAoF,CACrF;aACA,GAAG,CAAC,SAAS,EAAE,CAAC,CAA8C,CAAC;QAElE,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtB,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,QAAQ,CAAU,CAAC,CAAC,CAAC;QAC1E,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QACzC,MAAM,YAAY,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAClD,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE;aACjB,OAAO,CACN;qEAC6D,YAAY,GAAG,CAC7E;aACA,GAAG,CAAC,KAAK,EAAE,GAAG,GAAG,CAOjB,CAAC;QAEJ,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAClC,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,CACxC,CAAC;QACF,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;QACrC,MAAM,QAAQ,GAAG,OAAO;YACtB,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAC3C,CAAC,CAAC,MAAM,CAAC;QACX,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC9B,CAAC;IAED,gGAAgG;IACzF,OAAO,CAAC,KAAa,EAAE,EAAU;QACtC,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE;aAChB,OAAO,CACN;mEAC2D,CAC5D;aACA,GAAG,CAAC,EAAE,EAAE,KAAK,CASH,CAAC;QAEd,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,kDAAkD,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC5E,IAAI,CAAC,EAAE;aACJ,OAAO,CAAC,6DAA6D,CAAC;aACtE,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;QAElB,OAAO,IAAI,CAAC;IACd,CAAC;IAEM,KAAK,CAAC,KAAK;QAChB,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;QAC9B,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;IAClB,CAAC;CACF"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import BetterSqlite from "better-sqlite3";
|
|
4
|
+
import * as vector from "sqlite-vec";
|
|
5
|
+
const META_DIMS = "embedding_dims";
|
|
6
|
+
const META_MODEL = "embedding_model_id";
|
|
7
|
+
function getStoreMeta(db, key) {
|
|
8
|
+
const row = db
|
|
9
|
+
.prepare(`SELECT value FROM brain_store_meta WHERE key = ?`)
|
|
10
|
+
.get(key);
|
|
11
|
+
return row?.value ?? null;
|
|
12
|
+
}
|
|
13
|
+
function setStoreMeta(db, key, value) {
|
|
14
|
+
db.prepare(`INSERT INTO brain_store_meta (key, value) VALUES (?, ?)
|
|
15
|
+
ON CONFLICT(key) DO UPDATE SET value = excluded.value`).run(key, value);
|
|
16
|
+
}
|
|
17
|
+
function migrate(db) {
|
|
18
|
+
vector.load(db);
|
|
19
|
+
try {
|
|
20
|
+
const row = db.prepare(`SELECT vec_version() AS version`).get();
|
|
21
|
+
if (!row?.version || typeof row.version !== "string") {
|
|
22
|
+
throw new Error("vec_version() returned no version");
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
catch (err) {
|
|
26
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
27
|
+
throw new Error(`sqlite-vec extension is unavailable (probe failed: ${msg}). ` +
|
|
28
|
+
"Ensure sqlite-vec native bindings are installed for your platform.");
|
|
29
|
+
}
|
|
30
|
+
db.exec(`
|
|
31
|
+
CREATE TABLE IF NOT EXISTS brain_store_meta (
|
|
32
|
+
key TEXT PRIMARY KEY,
|
|
33
|
+
value TEXT NOT NULL
|
|
34
|
+
);
|
|
35
|
+
CREATE TABLE IF NOT EXISTS memories (
|
|
36
|
+
id TEXT PRIMARY KEY NOT NULL,
|
|
37
|
+
scope TEXT NOT NULL,
|
|
38
|
+
content TEXT NOT NULL,
|
|
39
|
+
type TEXT NOT NULL,
|
|
40
|
+
metadata_json TEXT NOT NULL,
|
|
41
|
+
archived INTEGER NOT NULL DEFAULT 0,
|
|
42
|
+
created_at_ms INTEGER NOT NULL
|
|
43
|
+
);
|
|
44
|
+
CREATE INDEX IF NOT EXISTS idx_memories_scope ON memories(scope);
|
|
45
|
+
CREATE INDEX IF NOT EXISTS idx_memories_type ON memories(type);
|
|
46
|
+
CREATE INDEX IF NOT EXISTS idx_memories_archived ON memories(archived);
|
|
47
|
+
`);
|
|
48
|
+
}
|
|
49
|
+
export function prepare(db, modelId, dimensions) {
|
|
50
|
+
const existing = db
|
|
51
|
+
.prepare(`SELECT sql FROM sqlite_master WHERE type='table' AND name='brain_memory_vec'`)
|
|
52
|
+
.get();
|
|
53
|
+
if (existing) {
|
|
54
|
+
const match = existing.sql.match(/float\[(\d+)\]/);
|
|
55
|
+
const hasId = existing.sql.includes("memory_id");
|
|
56
|
+
const hasCosine = existing.sql.includes("distance_metric=cosine");
|
|
57
|
+
const existingDims = match?.[1] ? Number.parseInt(match[1], 10) : null;
|
|
58
|
+
if (existingDims === dimensions && hasId && hasCosine) {
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
if (existingDims !== null && existingDims !== dimensions) {
|
|
62
|
+
throw new Error(`Brain embedding dimension mismatch: index is ${existingDims}d but the model produces ${dimensions}d. ` +
|
|
63
|
+
"Use the previous embed model or delete the brain database (data loss).");
|
|
64
|
+
}
|
|
65
|
+
db.exec("DROP TABLE IF EXISTS brain_memory_vec");
|
|
66
|
+
}
|
|
67
|
+
db.exec(`CREATE VIRTUAL TABLE brain_memory_vec USING vec0(memory_id TEXT PRIMARY KEY, embedding float[${dimensions}] distance_metric=cosine)`);
|
|
68
|
+
const existingModel = getStoreMeta(db, META_MODEL);
|
|
69
|
+
if (existingModel != null && existingModel !== modelId) {
|
|
70
|
+
throw new Error(`Brain was built with embed model "${existingModel}" but config uses "${modelId}". ` +
|
|
71
|
+
"Align models or delete the brain database (data loss).");
|
|
72
|
+
}
|
|
73
|
+
setStoreMeta(db, META_MODEL, modelId);
|
|
74
|
+
setStoreMeta(db, META_DIMS, String(dimensions));
|
|
75
|
+
}
|
|
76
|
+
export function open(file) {
|
|
77
|
+
const dir = path.dirname(file);
|
|
78
|
+
if (!fs.existsSync(dir)) {
|
|
79
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
80
|
+
}
|
|
81
|
+
const db = new BetterSqlite(file);
|
|
82
|
+
db.pragma("journal_mode = WAL");
|
|
83
|
+
db.pragma("foreign_keys = ON");
|
|
84
|
+
migrate(db);
|
|
85
|
+
return db;
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=database.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"database.js","sourceRoot":"","sources":["../../../src/core/memory/database.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
-
export {
|
|
2
|
-
export {
|
|
3
|
-
export type {
|
|
1
|
+
export { Brain } from "./brain.js";
|
|
2
|
+
export type { Memory, MemoryType } from "./types.js";
|
|
3
|
+
export type { Sqlite } from "./database.js";
|
|
4
|
+
export { open, prepare } from "./database.js";
|
|
5
|
+
export { create as createMemoryTools } from "./tools.js";
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
-
export {
|
|
2
|
-
export {
|
|
1
|
+
export { Brain } from "./brain.js";
|
|
2
|
+
export { open, prepare } from "./database.js";
|
|
3
|
+
export { create as createMemoryTools } from "./tools.js";
|
|
3
4
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/memory/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/memory/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAGnC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,MAAM,IAAI,iBAAiB,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { JSONValue } from "@strands-agents/sdk";
|
|
2
|
+
export declare function create(): Promise<(import("@strands-agents/sdk").InvokableTool<{
|
|
3
|
+
scope: "project" | "user";
|
|
4
|
+
content: string;
|
|
5
|
+
type: "task" | "fact" | "observation" | "preference";
|
|
6
|
+
metadata?: Record<string, unknown> | undefined;
|
|
7
|
+
}, JSONValue> | import("@strands-agents/sdk").InvokableTool<{
|
|
8
|
+
scope: "project" | "user";
|
|
9
|
+
query: string;
|
|
10
|
+
types?: ("task" | "fact" | "observation" | "preference")[] | undefined;
|
|
11
|
+
k?: number | undefined;
|
|
12
|
+
}, JSONValue> | import("@strands-agents/sdk").InvokableTool<{
|
|
13
|
+
scope: "project" | "user";
|
|
14
|
+
id: string;
|
|
15
|
+
reason?: string | undefined;
|
|
16
|
+
}, JSONValue>)[]>;
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import { tool } from "@strands-agents/sdk";
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
import { Brain } from "./brain.js";
|
|
4
|
+
import { memoryDbPath, modelsCachePath } from "../utils/paths.js";
|
|
5
|
+
import { DEFAULT_EMBED_MODEL } from "../config.js";
|
|
6
|
+
import { GgufEmbedder } from "../inference/index.js";
|
|
7
|
+
import { md5 } from "../utils/hashing.js";
|
|
8
|
+
const MemoryScopes = ["user", "project"];
|
|
9
|
+
const MemoryTypes = [
|
|
10
|
+
"fact",
|
|
11
|
+
"observation",
|
|
12
|
+
"preference",
|
|
13
|
+
"task",
|
|
14
|
+
];
|
|
15
|
+
function toJsonValue(value) {
|
|
16
|
+
return JSON.parse(JSON.stringify(value));
|
|
17
|
+
}
|
|
18
|
+
function toMemoryScope(context, project = false) {
|
|
19
|
+
if (!context) {
|
|
20
|
+
return "default";
|
|
21
|
+
}
|
|
22
|
+
const userId = context.agent.appState.get("userId");
|
|
23
|
+
if (!userId || typeof userId !== "string") {
|
|
24
|
+
return "default";
|
|
25
|
+
}
|
|
26
|
+
return project
|
|
27
|
+
? md5(userId.trim() + "_" + process.cwd())
|
|
28
|
+
: md5(userId.trim());
|
|
29
|
+
}
|
|
30
|
+
export async function create() {
|
|
31
|
+
const embedder = new GgufEmbedder({
|
|
32
|
+
modelUri: DEFAULT_EMBED_MODEL,
|
|
33
|
+
cacheDir: modelsCachePath(),
|
|
34
|
+
});
|
|
35
|
+
const brain = new Brain(memoryDbPath(), embedder);
|
|
36
|
+
await brain.warmup();
|
|
37
|
+
return [
|
|
38
|
+
tool({
|
|
39
|
+
name: "memory_add",
|
|
40
|
+
description: "Remember long-term memory. Use `user` for cross-session personal context, `project` for this working-directory only. Prefer facts, observations, preferences, or tasks. Optional `metadata` is stored and indexed for retrieval; use string values when possible.",
|
|
41
|
+
inputSchema: z.object({
|
|
42
|
+
scope: z
|
|
43
|
+
.enum(MemoryScopes)
|
|
44
|
+
.describe("`user`: per-user across projects; `project`: this working directory only."),
|
|
45
|
+
content: z.string().min(1).describe("Memory content"),
|
|
46
|
+
type: z.enum(MemoryTypes),
|
|
47
|
+
metadata: z
|
|
48
|
+
.record(z.string(), z.unknown())
|
|
49
|
+
.optional()
|
|
50
|
+
.describe("Optional JSON-serializable fields (e.g. title, source, tags). `title` can tune embedding."),
|
|
51
|
+
}),
|
|
52
|
+
callback: async (input, context) => {
|
|
53
|
+
const scope = toMemoryScope(context, input.scope === "project");
|
|
54
|
+
const id = await brain.memorize(scope, input.content, input.type, input.metadata ?? {});
|
|
55
|
+
return toJsonValue({ id });
|
|
56
|
+
},
|
|
57
|
+
}),
|
|
58
|
+
tool({
|
|
59
|
+
name: "memory_search",
|
|
60
|
+
description: "Search memories in the given scope (`user` or `project`). Use only if additional context is needed. Optionally filter by `types`.",
|
|
61
|
+
inputSchema: z.object({
|
|
62
|
+
scope: z
|
|
63
|
+
.enum(MemoryScopes)
|
|
64
|
+
.describe("`user`: per-user across projects; `project`: this working directory only."),
|
|
65
|
+
query: z.string().min(1).describe("What to search for"),
|
|
66
|
+
types: z
|
|
67
|
+
.array(z.enum(MemoryTypes))
|
|
68
|
+
.optional()
|
|
69
|
+
.describe("If set, only memories of these kinds are returned"),
|
|
70
|
+
k: z
|
|
71
|
+
.number()
|
|
72
|
+
.int()
|
|
73
|
+
.min(1)
|
|
74
|
+
.max(20)
|
|
75
|
+
.optional()
|
|
76
|
+
.describe("Number of results (default 5, max 20)"),
|
|
77
|
+
}),
|
|
78
|
+
callback: async (input, context) => {
|
|
79
|
+
const scope = toMemoryScope(context, input.scope === "project");
|
|
80
|
+
const memories = await brain.search(scope, input.query, input.types, input.k ?? 5);
|
|
81
|
+
return toJsonValue({
|
|
82
|
+
count: memories.length,
|
|
83
|
+
memories,
|
|
84
|
+
});
|
|
85
|
+
},
|
|
86
|
+
}),
|
|
87
|
+
tool({
|
|
88
|
+
name: "memory_archive",
|
|
89
|
+
description: "Mark a memory in the given scope as no longer relevant (soft archive).",
|
|
90
|
+
inputSchema: z.object({
|
|
91
|
+
scope: z
|
|
92
|
+
.enum(MemoryScopes)
|
|
93
|
+
.describe("Must match the scope where the memory was stored (`user` or `project`)."),
|
|
94
|
+
id: z.string().min(1),
|
|
95
|
+
reason: z.string().optional(),
|
|
96
|
+
}),
|
|
97
|
+
callback: async (input, context) => {
|
|
98
|
+
const scope = toMemoryScope(context, input.scope === "project");
|
|
99
|
+
const archived = brain.archive(scope, input.id);
|
|
100
|
+
return toJsonValue({ archived });
|
|
101
|
+
},
|
|
102
|
+
}),
|
|
103
|
+
];
|
|
104
|
+
}
|
|
105
|
+
//# sourceMappingURL=tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../../../src/core/memory/tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAE3C,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAClE,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAC;AAE1C,MAAM,YAAY,GAAwB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;AAE9D,MAAM,WAAW,GAAkC;IACjD,MAAM;IACN,aAAa;IACb,YAAY;IACZ,MAAM;CACP,CAAC;AAEF,SAAS,WAAW,CAAC,KAAc;IACjC,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAc,CAAC;AACxD,CAAC;AAED,SAAS,aAAa,CACpB,OAAqB,EACrB,UAAmB,KAAK;IAExB,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACpD,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC1C,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,OAAO;QACZ,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;QAC1C,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;AACzB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,MAAM;IAC1B,MAAM,QAAQ,GAAG,IAAI,YAAY,CAAC;QAChC,QAAQ,EAAE,mBAAmB;QAC7B,QAAQ,EAAE,eAAe,EAAE;KAC5B,CAAC,CAAC;IACH,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,YAAY,EAAE,EAAE,QAAQ,CAAC,CAAC;IAClD,MAAM,KAAK,CAAC,MAAM,EAAE,CAAC;IAErB,OAAO;QACL,IAAI,CAAC;YACH,IAAI,EAAE,YAAY;YAClB,WAAW,EACT,mQAAmQ;YACrQ,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;gBACpB,KAAK,EAAE,CAAC;qBACL,IAAI,CAAC,YAAY,CAAC;qBAClB,QAAQ,CACP,2EAA2E,CAC5E;gBACH,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,gBAAgB,CAAC;gBACrD,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC;gBACzB,QAAQ,EAAE,CAAC;qBACR,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;qBAC/B,QAAQ,EAAE;qBACV,QAAQ,CACP,2FAA2F,CAC5F;aACJ,CAAC;YACF,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,OAAqB,EAAE,EAAE;gBAC/C,MAAM,KAAK,GAAG,aAAa,CAAC,OAAO,EAAE,KAAK,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC;gBAChE,MAAM,EAAE,GAAG,MAAM,KAAK,CAAC,QAAQ,CAC7B,KAAK,EACL,KAAK,CAAC,OAAO,EACb,KAAK,CAAC,IAAI,EACV,KAAK,CAAC,QAAQ,IAAI,EAAE,CACrB,CAAC;gBAEF,OAAO,WAAW,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YAC7B,CAAC;SACF,CAAC;QACF,IAAI,CAAC;YACH,IAAI,EAAE,eAAe;YACrB,WAAW,EACT,mIAAmI;YACrI,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;gBACpB,KAAK,EAAE,CAAC;qBACL,IAAI,CAAC,YAAY,CAAC;qBAClB,QAAQ,CACP,2EAA2E,CAC5E;gBACH,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,oBAAoB,CAAC;gBACvD,KAAK,EAAE,CAAC;qBACL,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;qBAC1B,QAAQ,EAAE;qBACV,QAAQ,CAAC,mDAAmD,CAAC;gBAChE,CAAC,EAAE,CAAC;qBACD,MAAM,EAAE;qBACR,GAAG,EAAE;qBACL,GAAG,CAAC,CAAC,CAAC;qBACN,GAAG,CAAC,EAAE,CAAC;qBACP,QAAQ,EAAE;qBACV,QAAQ,CAAC,uCAAuC,CAAC;aACrD,CAAC;YACF,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,OAAqB,EAAE,EAAE;gBAC/C,MAAM,KAAK,GAAG,aAAa,CAAC,OAAO,EAAE,KAAK,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC;gBAChE,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,MAAM,CACjC,KAAK,EACL,KAAK,CAAC,KAAK,EACX,KAAK,CAAC,KAAK,EACX,KAAK,CAAC,CAAC,IAAI,CAAC,CACb,CAAC;gBAEF,OAAO,WAAW,CAAC;oBACjB,KAAK,EAAE,QAAQ,CAAC,MAAM;oBACtB,QAAQ;iBACT,CAAC,CAAC;YACL,CAAC;SACF,CAAC;QACF,IAAI,CAAC;YACH,IAAI,EAAE,gBAAgB;YACtB,WAAW,EACT,wEAAwE;YAC1E,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;gBACpB,KAAK,EAAE,CAAC;qBACL,IAAI,CAAC,YAAY,CAAC;qBAClB,QAAQ,CACP,yEAAyE,CAC1E;gBACH,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;gBACrB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;aAC9B,CAAC;YACF,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,OAAqB,EAAE,EAAE;gBAC/C,MAAM,KAAK,GAAG,aAAa,CAAC,OAAO,EAAE,KAAK,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC;gBAChE,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;gBAChD,OAAO,WAAW,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;YACnC,CAAC;SACF,CAAC;KACH,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export type Memory = {
|
|
2
|
+
id: string;
|
|
3
|
+
type: MemoryType;
|
|
4
|
+
content: string;
|
|
5
|
+
metadata: Record<string, unknown>;
|
|
6
|
+
archived: boolean;
|
|
7
|
+
createdAt: Date;
|
|
8
|
+
distance?: number | null;
|
|
9
|
+
score?: number | null;
|
|
10
|
+
};
|
|
11
|
+
export type MemoryType = "fact" | "observation" | "preference" | "task";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/core/memory/types.ts"],"names":[],"mappings":""}
|
|
@@ -1,13 +1,11 @@
|
|
|
1
1
|
export const modelProviders = {
|
|
2
2
|
anthropic: () => import("./anthropic.js"),
|
|
3
3
|
bedrock: () => import("./bedrock.js"),
|
|
4
|
-
bifrost: () => import("./bifrost/index.js"),
|
|
5
4
|
google: () => import("./google.js"),
|
|
6
5
|
groq: () => import("./groq.js"),
|
|
7
6
|
moonshot: () => import("./moonshot.js"),
|
|
8
7
|
ollama: () => import("./ollama/index.js"),
|
|
9
|
-
openai: () => import("./openai
|
|
10
|
-
tensorzero: () => import("./tensorzero/index.js"),
|
|
8
|
+
openai: () => import("./openai.js"),
|
|
11
9
|
xai: () => import("./xai.js"),
|
|
12
10
|
};
|
|
13
11
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/models/index.ts"],"names":[],"mappings":"AASA,MAAM,CAAC,MAAM,cAAc,GAAiD;IAC1E,SAAS,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,gBAAgB,CAAC;IACzC,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC;IACrC,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/models/index.ts"],"names":[],"mappings":"AASA,MAAM,CAAC,MAAM,cAAc,GAAiD;IAC1E,SAAS,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,gBAAgB,CAAC;IACzC,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC;IACrC,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC;IACnC,IAAI,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC;IAC/B,QAAQ,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,eAAe,CAAC;IACvC,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC;IACzC,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC;IACnC,GAAG,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC;CAC9B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai.js","sourceRoot":"","sources":["../../../src/core/models/openai.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mCAAmC,CAAC;AAMhE,MAAM,UAAU,MAAM,CACpB,KAAa,EACb,MAA+B;IAE/B,OAAO,IAAI,WAAW,CAAC;QACrB,GAAG,EAAE,MAAM;QACX,OAAO,EAAE,KAAK;QACd,GAAI,MAA4B;KACjC,CAAC,CAAC;AACL,CAAC"}
|