@fingerskier/augment 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/LICENSE +201 -0
- package/README.md +130 -0
- package/dist/bin/augment-daemon.d.ts +2 -0
- package/dist/bin/augment-daemon.js +5 -0
- package/dist/bin/augment-daemon.js.map +1 -0
- package/dist/bin/augment-mcp.d.ts +2 -0
- package/dist/bin/augment-mcp.js +5 -0
- package/dist/bin/augment-mcp.js.map +1 -0
- package/dist/bin/augment.d.ts +2 -0
- package/dist/bin/augment.js +5 -0
- package/dist/bin/augment.js.map +1 -0
- package/dist/cli.d.ts +1 -0
- package/dist/cli.js +13 -0
- package/dist/cli.js.map +1 -0
- package/dist/config.d.ts +9 -0
- package/dist/config.js +57 -0
- package/dist/config.js.map +1 -0
- package/dist/constants.d.ts +11 -0
- package/dist/constants.js +10 -0
- package/dist/constants.js.map +1 -0
- package/dist/daemon/client.d.ts +19 -0
- package/dist/daemon/client.js +146 -0
- package/dist/daemon/client.js.map +1 -0
- package/dist/daemon/http.d.ts +8 -0
- package/dist/daemon/http.js +142 -0
- package/dist/daemon/http.js.map +1 -0
- package/dist/daemon/main.d.ts +1 -0
- package/dist/daemon/main.js +16 -0
- package/dist/daemon/main.js.map +1 -0
- package/dist/db.d.ts +33 -0
- package/dist/db.js +338 -0
- package/dist/db.js.map +1 -0
- package/dist/embeddings.d.ts +20 -0
- package/dist/embeddings.js +35 -0
- package/dist/embeddings.js.map +1 -0
- package/dist/mcp/server.d.ts +1 -0
- package/dist/mcp/server.js +91 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/memory/files.d.ts +11 -0
- package/dist/memory/files.js +107 -0
- package/dist/memory/files.js.map +1 -0
- package/dist/memory/project.d.ts +8 -0
- package/dist/memory/project.js +59 -0
- package/dist/memory/project.js.map +1 -0
- package/dist/memory/scan.d.ts +1 -0
- package/dist/memory/scan.js +29 -0
- package/dist/memory/scan.js.map +1 -0
- package/dist/service.d.ts +43 -0
- package/dist/service.js +339 -0
- package/dist/service.js.map +1 -0
- package/dist/types.d.ts +95 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/util/hash.d.ts +3 -0
- package/dist/util/hash.js +25 -0
- package/dist/util/hash.js.map +1 -0
- package/dist/util/text.d.ts +4 -0
- package/dist/util/text.js +42 -0
- package/dist/util/text.js.map +1 -0
- package/docs/FEATURES.md +245 -0
- package/integrations/claude/CLAUDE.md +28 -0
- package/integrations/codex/SKILL.md +29 -0
- package/integrations/examples/claude-mcp-config.json +11 -0
- package/integrations/examples/codex-mcp-config.json +11 -0
- package/package.json +45 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/daemon/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { AugmentConfig } from "../config.js";
|
|
2
|
+
import type { AugmentService } from "../service.js";
|
|
3
|
+
import type { DaemonInfo } from "../types.js";
|
|
4
|
+
export interface RunningDaemon {
|
|
5
|
+
info: DaemonInfo;
|
|
6
|
+
close(): Promise<void>;
|
|
7
|
+
}
|
|
8
|
+
export declare function startHttpDaemon(config: AugmentConfig, service: AugmentService): Promise<RunningDaemon>;
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
import { randomBytes } from "node:crypto";
|
|
2
|
+
import { writeFile } from "node:fs/promises";
|
|
3
|
+
import http from "node:http";
|
|
4
|
+
import chokidar from "chokidar";
|
|
5
|
+
import { EMBEDDING_MODEL_ID } from "../constants.js";
|
|
6
|
+
export async function startHttpDaemon(config, service) {
|
|
7
|
+
await service.init();
|
|
8
|
+
const token = randomBytes(32).toString("hex");
|
|
9
|
+
const server = http.createServer((request, response) => {
|
|
10
|
+
handleRequest(service, token, request, response).catch((error) => {
|
|
11
|
+
sendJson(response, 500, { error: errorMessage(error) });
|
|
12
|
+
});
|
|
13
|
+
});
|
|
14
|
+
const port = config.daemonPort ?? 0;
|
|
15
|
+
await new Promise((resolve, reject) => {
|
|
16
|
+
server.once("error", reject);
|
|
17
|
+
server.listen(port, "127.0.0.1", () => {
|
|
18
|
+
server.off("error", reject);
|
|
19
|
+
resolve();
|
|
20
|
+
});
|
|
21
|
+
});
|
|
22
|
+
const address = server.address();
|
|
23
|
+
if (!address || typeof address === "string") {
|
|
24
|
+
throw new Error("Failed to determine daemon address");
|
|
25
|
+
}
|
|
26
|
+
const info = {
|
|
27
|
+
pid: process.pid,
|
|
28
|
+
endpoint: `http://127.0.0.1:${address.port}`,
|
|
29
|
+
token,
|
|
30
|
+
memoryRoot: config.memoryRoot,
|
|
31
|
+
model: EMBEDDING_MODEL_ID,
|
|
32
|
+
startedAt: new Date().toISOString(),
|
|
33
|
+
};
|
|
34
|
+
await writeFile(config.daemonFile, JSON.stringify(info, null, 2), "utf8");
|
|
35
|
+
let rebuildTimer;
|
|
36
|
+
const watcher = chokidar.watch(config.memoryRoot, {
|
|
37
|
+
ignoreInitial: true,
|
|
38
|
+
awaitWriteFinish: { stabilityThreshold: 250, pollInterval: 50 },
|
|
39
|
+
});
|
|
40
|
+
const scheduleRebuild = () => {
|
|
41
|
+
if (rebuildTimer) {
|
|
42
|
+
clearTimeout(rebuildTimer);
|
|
43
|
+
}
|
|
44
|
+
rebuildTimer = setTimeout(() => {
|
|
45
|
+
service.rebuildIndex().catch((error) => console.error("Index rebuild failed:", error));
|
|
46
|
+
}, 250);
|
|
47
|
+
};
|
|
48
|
+
watcher.on("add", scheduleRebuild);
|
|
49
|
+
watcher.on("change", scheduleRebuild);
|
|
50
|
+
watcher.on("unlink", scheduleRebuild);
|
|
51
|
+
return {
|
|
52
|
+
info,
|
|
53
|
+
async close() {
|
|
54
|
+
if (rebuildTimer) {
|
|
55
|
+
clearTimeout(rebuildTimer);
|
|
56
|
+
}
|
|
57
|
+
await watcher.close();
|
|
58
|
+
await new Promise((resolve, reject) => {
|
|
59
|
+
server.close((error) => (error ? reject(error) : resolve()));
|
|
60
|
+
});
|
|
61
|
+
},
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
async function handleRequest(service, token, request, response) {
|
|
65
|
+
const url = new URL(request.url ?? "/", "http://127.0.0.1");
|
|
66
|
+
if (request.method === "GET" && url.pathname === "/health") {
|
|
67
|
+
sendJson(response, 200, { ok: true, pid: process.pid, title: process.title });
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
if (!authorized(request, token)) {
|
|
71
|
+
sendJson(response, 401, { error: "unauthorized" });
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
if (request.method === "POST" && url.pathname === "/projects/init") {
|
|
75
|
+
sendJson(response, 200, await service.initProject(await readJson(request)));
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
if (request.method === "GET" && url.pathname === "/projects") {
|
|
79
|
+
sendJson(response, 200, await service.listProjects(url.searchParams.get("name") ?? undefined));
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
if (request.method === "POST" && url.pathname === "/memories/search") {
|
|
83
|
+
sendJson(response, 200, await service.search(await readJson(request)));
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
if (request.method === "POST" && url.pathname === "/memories/upsert") {
|
|
87
|
+
sendJson(response, 200, await service.upsert(await readJson(request)));
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
const memoryMatch = /^\/memories\/(\d+)$/.exec(url.pathname);
|
|
91
|
+
if (request.method === "GET" && memoryMatch) {
|
|
92
|
+
sendJson(response, 200, await service.read(Number(memoryMatch[1])));
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
if (request.method === "POST" && url.pathname === "/links") {
|
|
96
|
+
const body = (await readJson(request));
|
|
97
|
+
sendJson(response, 200, await service.link(body.from_memory_id, body.to_memory_id, body.type));
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
if (request.method === "GET" && url.pathname === "/links") {
|
|
101
|
+
const memoryId = Number(url.searchParams.get("memory_id"));
|
|
102
|
+
sendJson(response, 200, await service.listLinks(memoryId));
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
const linkMatch = /^\/links\/(\d+)$/.exec(url.pathname);
|
|
106
|
+
if (request.method === "DELETE" && linkMatch) {
|
|
107
|
+
sendJson(response, 200, await service.unlink(Number(linkMatch[1])));
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
if (request.method === "POST" && url.pathname === "/index/rebuild") {
|
|
111
|
+
sendJson(response, 200, await service.rebuildIndex());
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
if (request.method === "GET" && url.pathname === "/index/status") {
|
|
115
|
+
sendJson(response, 200, { ok: true });
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
118
|
+
sendJson(response, 404, { error: "not found" });
|
|
119
|
+
}
|
|
120
|
+
function authorized(request, token) {
|
|
121
|
+
const authorization = request.headers.authorization;
|
|
122
|
+
if (authorization === `Bearer ${token}`) {
|
|
123
|
+
return true;
|
|
124
|
+
}
|
|
125
|
+
return request.headers["x-augment-token"] === token;
|
|
126
|
+
}
|
|
127
|
+
async function readJson(request) {
|
|
128
|
+
const chunks = [];
|
|
129
|
+
for await (const chunk of request) {
|
|
130
|
+
chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));
|
|
131
|
+
}
|
|
132
|
+
const raw = Buffer.concat(chunks).toString("utf8").trim();
|
|
133
|
+
return raw ? JSON.parse(raw) : {};
|
|
134
|
+
}
|
|
135
|
+
function sendJson(response, status, body) {
|
|
136
|
+
response.writeHead(status, { "content-type": "application/json; charset=utf-8" });
|
|
137
|
+
response.end(JSON.stringify(body));
|
|
138
|
+
}
|
|
139
|
+
function errorMessage(error) {
|
|
140
|
+
return error instanceof Error ? error.message : String(error);
|
|
141
|
+
}
|
|
142
|
+
//# sourceMappingURL=http.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/daemon/http.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function startDaemonFromCli(_args: string[]): Promise<void>;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { loadConfig } from "../config.js";
|
|
2
|
+
import { AugmentService } from "../service.js";
|
|
3
|
+
import { startHttpDaemon } from "./http.js";
|
|
4
|
+
export async function startDaemonFromCli(_args) {
|
|
5
|
+
const config = await loadConfig();
|
|
6
|
+
const service = new AugmentService(config);
|
|
7
|
+
const daemon = await startHttpDaemon(config, service);
|
|
8
|
+
console.error(`augment-daemon listening at ${daemon.info.endpoint}`);
|
|
9
|
+
const close = async () => {
|
|
10
|
+
await daemon.close();
|
|
11
|
+
process.exit(0);
|
|
12
|
+
};
|
|
13
|
+
process.on("SIGINT", () => void close());
|
|
14
|
+
process.on("SIGTERM", () => void close());
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=main.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"main.js","sourceRoot":"","sources":["../../src/daemon/main.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAE5C,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,KAAe;IACtD,MAAM,MAAM,GAAG,MAAM,UAAU,EAAE,CAAC;IAClC,MAAM,OAAO,GAAG,IAAI,cAAc,CAAC,MAAM,CAAC,CAAC;IAC3C,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtD,OAAO,CAAC,KAAK,CAAC,+BAA+B,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;IAErE,MAAM,KAAK,GAAG,KAAK,IAAI,EAAE;QACvB,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;QACrB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC;IACF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,CAAC;IACzC,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,CAAC;AAC5C,CAAC"}
|
package/dist/db.d.ts
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { EmbeddingProvider } from "./embeddings.js";
|
|
2
|
+
import type { LinkRecord, MemoryRecord, ParsedMemory, ProjectRecord } from "./types.js";
|
|
3
|
+
export declare class AugmentDatabase {
|
|
4
|
+
private readonly databasePath;
|
|
5
|
+
private client;
|
|
6
|
+
constructor(databasePath: string);
|
|
7
|
+
init(): Promise<void>;
|
|
8
|
+
close(): void;
|
|
9
|
+
upsertProject(name: string, source?: string): Promise<ProjectRecord>;
|
|
10
|
+
listProjects(name?: string): Promise<ProjectRecord[]>;
|
|
11
|
+
getProjectById(id: number): Promise<ProjectRecord | undefined>;
|
|
12
|
+
getProjectByName(name: string): Promise<ProjectRecord | undefined>;
|
|
13
|
+
upsertMemory(memory: ParsedMemory): Promise<MemoryRecord>;
|
|
14
|
+
removeMissingMemories(relativePaths: string[]): Promise<void>;
|
|
15
|
+
rebuildLinks(): Promise<void>;
|
|
16
|
+
getMemoryById(id: number): Promise<MemoryRecord | undefined>;
|
|
17
|
+
getMemoryByPath(relativePath: string): Promise<MemoryRecord | undefined>;
|
|
18
|
+
listMemories(): Promise<MemoryRecord[]>;
|
|
19
|
+
listMemoriesForProject(projectId: number, kind?: string): Promise<MemoryRecord[]>;
|
|
20
|
+
listLinks(memoryId: number): Promise<LinkRecord[]>;
|
|
21
|
+
getLinkById(id: number): Promise<LinkRecord | undefined>;
|
|
22
|
+
getAllLinks(): Promise<LinkRecord[]>;
|
|
23
|
+
getEmbedding(memoryId: number): Promise<{
|
|
24
|
+
vector: number[];
|
|
25
|
+
embeddedHash: string;
|
|
26
|
+
} | undefined>;
|
|
27
|
+
getAllEmbeddings(): Promise<Map<number, number[]>>;
|
|
28
|
+
upsertEmbedding(memory: ParsedMemory | MemoryRecord, provider: EmbeddingProvider, vector: number[]): Promise<void>;
|
|
29
|
+
embeddingText(memory: ParsedMemory | MemoryRecord): string;
|
|
30
|
+
private execute;
|
|
31
|
+
private batch;
|
|
32
|
+
private getClient;
|
|
33
|
+
}
|
package/dist/db.js
ADDED
|
@@ -0,0 +1,338 @@
|
|
|
1
|
+
import { createClient } from "@libsql/client";
|
|
2
|
+
import { dirname } from "node:path";
|
|
3
|
+
import { mkdir } from "node:fs/promises";
|
|
4
|
+
import { memoryToEmbeddingText } from "./memory/files.js";
|
|
5
|
+
import { projectParts } from "./memory/project.js";
|
|
6
|
+
export class AugmentDatabase {
|
|
7
|
+
databasePath;
|
|
8
|
+
client;
|
|
9
|
+
constructor(databasePath) {
|
|
10
|
+
this.databasePath = databasePath;
|
|
11
|
+
}
|
|
12
|
+
async init() {
|
|
13
|
+
await mkdir(dirname(this.databasePath), { recursive: true });
|
|
14
|
+
this.getClient();
|
|
15
|
+
await this.batch([
|
|
16
|
+
`PRAGMA foreign_keys = ON`,
|
|
17
|
+
`CREATE TABLE IF NOT EXISTS projects (
|
|
18
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
19
|
+
name TEXT NOT NULL UNIQUE,
|
|
20
|
+
org TEXT NOT NULL,
|
|
21
|
+
repo TEXT NOT NULL,
|
|
22
|
+
source TEXT NOT NULL,
|
|
23
|
+
created_at TEXT NOT NULL,
|
|
24
|
+
updated_at TEXT NOT NULL
|
|
25
|
+
)`,
|
|
26
|
+
`CREATE TABLE IF NOT EXISTS memories (
|
|
27
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
28
|
+
project_id INTEGER NOT NULL REFERENCES projects(id) ON DELETE CASCADE,
|
|
29
|
+
kind TEXT NOT NULL,
|
|
30
|
+
name TEXT NOT NULL,
|
|
31
|
+
relative_path TEXT NOT NULL UNIQUE,
|
|
32
|
+
content_hash TEXT NOT NULL,
|
|
33
|
+
frontmatter_hash TEXT NOT NULL,
|
|
34
|
+
size INTEGER NOT NULL,
|
|
35
|
+
density REAL NOT NULL,
|
|
36
|
+
mtime REAL NOT NULL,
|
|
37
|
+
tags_json TEXT NOT NULL,
|
|
38
|
+
links_json TEXT NOT NULL,
|
|
39
|
+
body TEXT NOT NULL,
|
|
40
|
+
created_at TEXT NOT NULL,
|
|
41
|
+
updated_at TEXT NOT NULL
|
|
42
|
+
)`,
|
|
43
|
+
`CREATE TABLE IF NOT EXISTS memory_embeddings (
|
|
44
|
+
memory_id INTEGER PRIMARY KEY REFERENCES memories(id) ON DELETE CASCADE,
|
|
45
|
+
model_id TEXT NOT NULL,
|
|
46
|
+
model_version TEXT NOT NULL,
|
|
47
|
+
dimensions INTEGER NOT NULL,
|
|
48
|
+
vector_json TEXT NOT NULL,
|
|
49
|
+
embedded_hash TEXT NOT NULL,
|
|
50
|
+
embedded_at TEXT NOT NULL
|
|
51
|
+
)`,
|
|
52
|
+
`CREATE TABLE IF NOT EXISTS links (
|
|
53
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
54
|
+
from_memory_id INTEGER NOT NULL REFERENCES memories(id) ON DELETE CASCADE,
|
|
55
|
+
to_memory_id INTEGER NOT NULL REFERENCES memories(id) ON DELETE CASCADE,
|
|
56
|
+
type TEXT NOT NULL,
|
|
57
|
+
created_at TEXT NOT NULL,
|
|
58
|
+
UNIQUE(from_memory_id, to_memory_id, type)
|
|
59
|
+
)`,
|
|
60
|
+
`CREATE INDEX IF NOT EXISTS idx_memories_project_id ON memories(project_id)`,
|
|
61
|
+
`CREATE INDEX IF NOT EXISTS idx_memories_kind ON memories(kind)`,
|
|
62
|
+
`CREATE INDEX IF NOT EXISTS idx_links_from_memory_id ON links(from_memory_id)`,
|
|
63
|
+
`CREATE INDEX IF NOT EXISTS idx_links_to_memory_id ON links(to_memory_id)`,
|
|
64
|
+
]);
|
|
65
|
+
}
|
|
66
|
+
close() {
|
|
67
|
+
this.client?.close();
|
|
68
|
+
this.client = undefined;
|
|
69
|
+
}
|
|
70
|
+
async upsertProject(name, source = "git") {
|
|
71
|
+
const parts = projectParts(name);
|
|
72
|
+
const now = new Date().toISOString();
|
|
73
|
+
await this.execute(`INSERT INTO projects (name, org, repo, source, created_at, updated_at)
|
|
74
|
+
VALUES (?, ?, ?, ?, ?, ?)
|
|
75
|
+
ON CONFLICT(name) DO UPDATE SET
|
|
76
|
+
org = excluded.org,
|
|
77
|
+
repo = excluded.repo,
|
|
78
|
+
source = excluded.source,
|
|
79
|
+
updated_at = excluded.updated_at`, [name, parts.org, parts.repo, source, now, now]);
|
|
80
|
+
const project = await this.getProjectByName(name);
|
|
81
|
+
if (!project) {
|
|
82
|
+
throw new Error(`Failed to upsert project: ${name}`);
|
|
83
|
+
}
|
|
84
|
+
return project;
|
|
85
|
+
}
|
|
86
|
+
async listProjects(name) {
|
|
87
|
+
const result = name
|
|
88
|
+
? await this.execute(`SELECT * FROM projects WHERE name LIKE ? ORDER BY name`, [`%${name}%`])
|
|
89
|
+
: await this.execute(`SELECT * FROM projects ORDER BY name`);
|
|
90
|
+
return result.rows.map((row) => projectFromRow(row));
|
|
91
|
+
}
|
|
92
|
+
async getProjectById(id) {
|
|
93
|
+
const result = await this.execute(`SELECT * FROM projects WHERE id = ?`, [id]);
|
|
94
|
+
return result.rows[0] ? projectFromRow(result.rows[0]) : undefined;
|
|
95
|
+
}
|
|
96
|
+
async getProjectByName(name) {
|
|
97
|
+
const result = await this.execute(`SELECT * FROM projects WHERE name = ?`, [name]);
|
|
98
|
+
return result.rows[0] ? projectFromRow(result.rows[0]) : undefined;
|
|
99
|
+
}
|
|
100
|
+
async upsertMemory(memory) {
|
|
101
|
+
const project = await this.upsertProject(memory.frontmatter.project);
|
|
102
|
+
const now = new Date().toISOString();
|
|
103
|
+
await this.execute(`INSERT INTO memories (
|
|
104
|
+
project_id, kind, name, relative_path, content_hash, frontmatter_hash,
|
|
105
|
+
size, density, mtime, tags_json, links_json, body, created_at, updated_at
|
|
106
|
+
)
|
|
107
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
108
|
+
ON CONFLICT(relative_path) DO UPDATE SET
|
|
109
|
+
project_id = excluded.project_id,
|
|
110
|
+
kind = excluded.kind,
|
|
111
|
+
name = excluded.name,
|
|
112
|
+
content_hash = excluded.content_hash,
|
|
113
|
+
frontmatter_hash = excluded.frontmatter_hash,
|
|
114
|
+
size = excluded.size,
|
|
115
|
+
density = excluded.density,
|
|
116
|
+
mtime = excluded.mtime,
|
|
117
|
+
tags_json = excluded.tags_json,
|
|
118
|
+
links_json = excluded.links_json,
|
|
119
|
+
body = excluded.body,
|
|
120
|
+
updated_at = excluded.updated_at`, [
|
|
121
|
+
project.id,
|
|
122
|
+
memory.frontmatter.kind,
|
|
123
|
+
memory.frontmatter.name,
|
|
124
|
+
memory.relativePath,
|
|
125
|
+
memory.contentHash,
|
|
126
|
+
memory.frontmatterHash,
|
|
127
|
+
memory.size,
|
|
128
|
+
memory.density,
|
|
129
|
+
memory.mtime,
|
|
130
|
+
JSON.stringify(memory.frontmatter.tags),
|
|
131
|
+
JSON.stringify(memory.frontmatter.links),
|
|
132
|
+
memory.body,
|
|
133
|
+
memory.frontmatter.created_at || now,
|
|
134
|
+
memory.frontmatter.updated_at || now,
|
|
135
|
+
]);
|
|
136
|
+
const record = await this.getMemoryByPath(memory.relativePath);
|
|
137
|
+
if (!record) {
|
|
138
|
+
throw new Error(`Failed to upsert memory: ${memory.relativePath}`);
|
|
139
|
+
}
|
|
140
|
+
return record;
|
|
141
|
+
}
|
|
142
|
+
async removeMissingMemories(relativePaths) {
|
|
143
|
+
if (relativePaths.length === 0) {
|
|
144
|
+
await this.execute(`DELETE FROM memories`);
|
|
145
|
+
return;
|
|
146
|
+
}
|
|
147
|
+
const placeholders = relativePaths.map(() => "?").join(", ");
|
|
148
|
+
await this.execute(`DELETE FROM memories WHERE relative_path NOT IN (${placeholders})`, relativePaths);
|
|
149
|
+
}
|
|
150
|
+
async rebuildLinks() {
|
|
151
|
+
await this.execute(`DELETE FROM links`);
|
|
152
|
+
const memories = await this.listMemories();
|
|
153
|
+
const byPath = new Map(memories.map((memory) => [memory.relative_path, memory]));
|
|
154
|
+
const now = new Date().toISOString();
|
|
155
|
+
for (const memory of memories) {
|
|
156
|
+
for (const link of memory.links) {
|
|
157
|
+
const target = byPath.get(link.to);
|
|
158
|
+
if (!target) {
|
|
159
|
+
continue;
|
|
160
|
+
}
|
|
161
|
+
await this.execute(`INSERT OR IGNORE INTO links (from_memory_id, to_memory_id, type, created_at)
|
|
162
|
+
VALUES (?, ?, ?, ?)`, [memory.id, target.id, link.type, now]);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
async getMemoryById(id) {
|
|
167
|
+
const result = await this.execute(memorySelectSql(`WHERE memories.id = ?`), [id]);
|
|
168
|
+
return result.rows[0] ? memoryFromRow(result.rows[0]) : undefined;
|
|
169
|
+
}
|
|
170
|
+
async getMemoryByPath(relativePath) {
|
|
171
|
+
const result = await this.execute(memorySelectSql(`WHERE memories.relative_path = ?`), [relativePath]);
|
|
172
|
+
return result.rows[0] ? memoryFromRow(result.rows[0]) : undefined;
|
|
173
|
+
}
|
|
174
|
+
async listMemories() {
|
|
175
|
+
const result = await this.execute(memorySelectSql(`ORDER BY memories.relative_path`));
|
|
176
|
+
return result.rows.map((row) => memoryFromRow(row));
|
|
177
|
+
}
|
|
178
|
+
async listMemoriesForProject(projectId, kind) {
|
|
179
|
+
const result = kind
|
|
180
|
+
? await this.execute(memorySelectSql(`WHERE memories.project_id = ? AND memories.kind = ?`), [projectId, kind])
|
|
181
|
+
: await this.execute(memorySelectSql(`WHERE memories.project_id = ?`), [projectId]);
|
|
182
|
+
return result.rows.map((row) => memoryFromRow(row));
|
|
183
|
+
}
|
|
184
|
+
async listLinks(memoryId) {
|
|
185
|
+
const result = await this.execute(`SELECT
|
|
186
|
+
links.*,
|
|
187
|
+
from_memory.relative_path AS from_relative_path,
|
|
188
|
+
to_memory.relative_path AS to_relative_path
|
|
189
|
+
FROM links
|
|
190
|
+
JOIN memories AS from_memory ON from_memory.id = links.from_memory_id
|
|
191
|
+
JOIN memories AS to_memory ON to_memory.id = links.to_memory_id
|
|
192
|
+
WHERE links.from_memory_id = ? OR links.to_memory_id = ?
|
|
193
|
+
ORDER BY links.id`, [memoryId, memoryId]);
|
|
194
|
+
return result.rows.map((row) => linkFromRow(row));
|
|
195
|
+
}
|
|
196
|
+
async getLinkById(id) {
|
|
197
|
+
const result = await this.execute(`SELECT
|
|
198
|
+
links.*,
|
|
199
|
+
from_memory.relative_path AS from_relative_path,
|
|
200
|
+
to_memory.relative_path AS to_relative_path
|
|
201
|
+
FROM links
|
|
202
|
+
JOIN memories AS from_memory ON from_memory.id = links.from_memory_id
|
|
203
|
+
JOIN memories AS to_memory ON to_memory.id = links.to_memory_id
|
|
204
|
+
WHERE links.id = ?`, [id]);
|
|
205
|
+
return result.rows[0] ? linkFromRow(result.rows[0]) : undefined;
|
|
206
|
+
}
|
|
207
|
+
async getAllLinks() {
|
|
208
|
+
const result = await this.execute(`SELECT
|
|
209
|
+
links.*,
|
|
210
|
+
from_memory.relative_path AS from_relative_path,
|
|
211
|
+
to_memory.relative_path AS to_relative_path
|
|
212
|
+
FROM links
|
|
213
|
+
JOIN memories AS from_memory ON from_memory.id = links.from_memory_id
|
|
214
|
+
JOIN memories AS to_memory ON to_memory.id = links.to_memory_id
|
|
215
|
+
ORDER BY links.id`);
|
|
216
|
+
return result.rows.map((row) => linkFromRow(row));
|
|
217
|
+
}
|
|
218
|
+
async getEmbedding(memoryId) {
|
|
219
|
+
const result = await this.execute(`SELECT vector_json, embedded_hash FROM memory_embeddings WHERE memory_id = ?`, [
|
|
220
|
+
memoryId,
|
|
221
|
+
]);
|
|
222
|
+
const row = result.rows[0];
|
|
223
|
+
if (!row) {
|
|
224
|
+
return undefined;
|
|
225
|
+
}
|
|
226
|
+
return {
|
|
227
|
+
vector: JSON.parse(String(row.vector_json)),
|
|
228
|
+
embeddedHash: String(row.embedded_hash),
|
|
229
|
+
};
|
|
230
|
+
}
|
|
231
|
+
async getAllEmbeddings() {
|
|
232
|
+
const result = await this.execute(`SELECT memory_id, vector_json FROM memory_embeddings`);
|
|
233
|
+
return new Map(result.rows.map((row) => [Number(row.memory_id), JSON.parse(String(row.vector_json))]));
|
|
234
|
+
}
|
|
235
|
+
async upsertEmbedding(memory, provider, vector) {
|
|
236
|
+
const record = "id" in memory ? memory : await this.getMemoryByPath(memory.relativePath);
|
|
237
|
+
if (!record) {
|
|
238
|
+
throw new Error(`Cannot store embedding for missing memory`);
|
|
239
|
+
}
|
|
240
|
+
await this.execute(`INSERT INTO memory_embeddings (
|
|
241
|
+
memory_id, model_id, model_version, dimensions, vector_json, embedded_hash, embedded_at
|
|
242
|
+
)
|
|
243
|
+
VALUES (?, ?, ?, ?, ?, ?, ?)
|
|
244
|
+
ON CONFLICT(memory_id) DO UPDATE SET
|
|
245
|
+
model_id = excluded.model_id,
|
|
246
|
+
model_version = excluded.model_version,
|
|
247
|
+
dimensions = excluded.dimensions,
|
|
248
|
+
vector_json = excluded.vector_json,
|
|
249
|
+
embedded_hash = excluded.embedded_hash,
|
|
250
|
+
embedded_at = excluded.embedded_at`, [
|
|
251
|
+
record.id,
|
|
252
|
+
provider.modelId,
|
|
253
|
+
provider.modelVersion,
|
|
254
|
+
provider.dimensions,
|
|
255
|
+
JSON.stringify(vector),
|
|
256
|
+
record.content_hash,
|
|
257
|
+
new Date().toISOString(),
|
|
258
|
+
]);
|
|
259
|
+
}
|
|
260
|
+
embeddingText(memory) {
|
|
261
|
+
if ("frontmatter" in memory) {
|
|
262
|
+
return memoryToEmbeddingText(memory);
|
|
263
|
+
}
|
|
264
|
+
return [
|
|
265
|
+
memory.project_name,
|
|
266
|
+
memory.kind,
|
|
267
|
+
memory.name,
|
|
268
|
+
memory.relative_path,
|
|
269
|
+
memory.tags.join(" "),
|
|
270
|
+
"",
|
|
271
|
+
memory.body,
|
|
272
|
+
].join("\n");
|
|
273
|
+
}
|
|
274
|
+
async execute(sql, args) {
|
|
275
|
+
return this.getClient().execute(sql, args);
|
|
276
|
+
}
|
|
277
|
+
async batch(sql) {
|
|
278
|
+
await this.getClient().batch(sql.map((statement) => [statement]));
|
|
279
|
+
}
|
|
280
|
+
getClient() {
|
|
281
|
+
if (!this.client) {
|
|
282
|
+
const normalized = this.databasePath.replace(/\\/g, "/");
|
|
283
|
+
this.client = createClient({ url: `file:${normalized}` });
|
|
284
|
+
}
|
|
285
|
+
return this.client;
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
function memorySelectSql(suffix) {
|
|
289
|
+
return `SELECT
|
|
290
|
+
memories.*,
|
|
291
|
+
projects.name AS project_name
|
|
292
|
+
FROM memories
|
|
293
|
+
JOIN projects ON projects.id = memories.project_id
|
|
294
|
+
${suffix}`;
|
|
295
|
+
}
|
|
296
|
+
function projectFromRow(row) {
|
|
297
|
+
return {
|
|
298
|
+
id: Number(row.id),
|
|
299
|
+
name: String(row.name),
|
|
300
|
+
org: String(row.org),
|
|
301
|
+
repo: String(row.repo),
|
|
302
|
+
source: String(row.source),
|
|
303
|
+
created_at: String(row.created_at),
|
|
304
|
+
updated_at: String(row.updated_at),
|
|
305
|
+
};
|
|
306
|
+
}
|
|
307
|
+
function memoryFromRow(row) {
|
|
308
|
+
return {
|
|
309
|
+
id: Number(row.id),
|
|
310
|
+
project_id: Number(row.project_id),
|
|
311
|
+
project_name: String(row.project_name),
|
|
312
|
+
kind: String(row.kind),
|
|
313
|
+
name: String(row.name),
|
|
314
|
+
relative_path: String(row.relative_path),
|
|
315
|
+
content_hash: String(row.content_hash),
|
|
316
|
+
frontmatter_hash: String(row.frontmatter_hash),
|
|
317
|
+
size: Number(row.size),
|
|
318
|
+
density: Number(row.density),
|
|
319
|
+
mtime: Number(row.mtime),
|
|
320
|
+
tags: JSON.parse(String(row.tags_json)),
|
|
321
|
+
links: JSON.parse(String(row.links_json)),
|
|
322
|
+
body: String(row.body),
|
|
323
|
+
created_at: String(row.created_at),
|
|
324
|
+
updated_at: String(row.updated_at),
|
|
325
|
+
};
|
|
326
|
+
}
|
|
327
|
+
function linkFromRow(row) {
|
|
328
|
+
return {
|
|
329
|
+
id: Number(row.id),
|
|
330
|
+
from_memory_id: Number(row.from_memory_id),
|
|
331
|
+
to_memory_id: Number(row.to_memory_id),
|
|
332
|
+
from_relative_path: String(row.from_relative_path),
|
|
333
|
+
to_relative_path: String(row.to_relative_path),
|
|
334
|
+
type: String(row.type),
|
|
335
|
+
created_at: String(row.created_at),
|
|
336
|
+
};
|
|
337
|
+
}
|
|
338
|
+
//# sourceMappingURL=db.js.map
|
package/dist/db.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"db.js","sourceRoot":"","sources":["../src/db.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export interface EmbeddingProvider {
|
|
2
|
+
readonly modelId: string;
|
|
3
|
+
readonly modelVersion: string;
|
|
4
|
+
readonly dimensions: number;
|
|
5
|
+
embed(text: string): Promise<number[]>;
|
|
6
|
+
}
|
|
7
|
+
export declare class TransformersEmbeddingProvider implements EmbeddingProvider {
|
|
8
|
+
readonly modelId = "Xenova/bge-small-en-v1.5";
|
|
9
|
+
readonly modelVersion = "transformers.js";
|
|
10
|
+
readonly dimensions = 384;
|
|
11
|
+
private extractor;
|
|
12
|
+
embed(text: string): Promise<number[]>;
|
|
13
|
+
private getExtractor;
|
|
14
|
+
}
|
|
15
|
+
export declare class HashEmbeddingProvider implements EmbeddingProvider {
|
|
16
|
+
readonly modelId = "test/hash-embedding";
|
|
17
|
+
readonly modelVersion = "test";
|
|
18
|
+
readonly dimensions = 384;
|
|
19
|
+
embed(text: string): Promise<number[]>;
|
|
20
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { EMBEDDING_DIMENSIONS, EMBEDDING_MODEL_ID } from "./constants.js";
|
|
2
|
+
export class TransformersEmbeddingProvider {
|
|
3
|
+
modelId = EMBEDDING_MODEL_ID;
|
|
4
|
+
modelVersion = "transformers.js";
|
|
5
|
+
dimensions = EMBEDDING_DIMENSIONS;
|
|
6
|
+
extractor;
|
|
7
|
+
async embed(text) {
|
|
8
|
+
const extractor = await this.getExtractor();
|
|
9
|
+
const output = await extractor(text, { pooling: "mean", normalize: true });
|
|
10
|
+
const data = Array.from(output.data, Number);
|
|
11
|
+
if (data.length !== this.dimensions) {
|
|
12
|
+
throw new Error(`Expected ${this.dimensions} embedding dimensions, got ${data.length}`);
|
|
13
|
+
}
|
|
14
|
+
return data;
|
|
15
|
+
}
|
|
16
|
+
async getExtractor() {
|
|
17
|
+
this.extractor ??= import("@huggingface/transformers").then(({ pipeline }) => pipeline("feature-extraction", this.modelId));
|
|
18
|
+
return this.extractor;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
export class HashEmbeddingProvider {
|
|
22
|
+
modelId = "test/hash-embedding";
|
|
23
|
+
modelVersion = "test";
|
|
24
|
+
dimensions = EMBEDDING_DIMENSIONS;
|
|
25
|
+
async embed(text) {
|
|
26
|
+
const vector = new Array(this.dimensions).fill(0);
|
|
27
|
+
for (let index = 0; index < text.length; index += 1) {
|
|
28
|
+
const slot = index % this.dimensions;
|
|
29
|
+
vector[slot] += (text.charCodeAt(index) % 31) / 31;
|
|
30
|
+
}
|
|
31
|
+
const magnitude = Math.sqrt(vector.reduce((sum, value) => sum + value * value, 0));
|
|
32
|
+
return magnitude === 0 ? vector : vector.map((value) => value / magnitude);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=embeddings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"embeddings.js","sourceRoot":"","sources":["../src/embeddings.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAS1E,MAAM,OAAO,6BAA6B;IAC/B,OAAO,GAAG,kBAAkB,CAAC;IAC7B,YAAY,GAAG,iBAAiB,CAAC;IACjC,UAAU,GAAG,oBAAoB,CAAC;IACnC,SAAS,CAA2B;IAE5C,KAAK,CAAC,KAAK,CAAC,IAAY;QACtB,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;QAC5C,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3E,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAwB,EAAE,MAAM,CAAC,CAAC;QACjE,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,UAAU,EAAE,CAAC;YACpC,MAAM,IAAI,KAAK,CAAC,YAAY,IAAI,CAAC,UAAU,8BAA8B,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QAC1F,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,KAAK,CAAC,YAAY;QACxB,IAAI,CAAC,SAAS,KAAK,MAAM,CAAC,2BAA2B,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAC3E,QAAQ,CAAC,oBAAoB,EAAE,IAAI,CAAC,OAAO,CAAC,CAC7C,CAAC;QACF,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;CACF;AAED,MAAM,OAAO,qBAAqB;IACvB,OAAO,GAAG,qBAAqB,CAAC;IAChC,YAAY,GAAG,MAAM,CAAC;IACtB,UAAU,GAAG,oBAAoB,CAAC;IAE3C,KAAK,CAAC,KAAK,CAAC,IAAY;QACtB,MAAM,MAAM,GAAG,IAAI,KAAK,CAAS,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC1D,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;YACpD,MAAM,IAAI,GAAG,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC;YACrC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC;QACrD,CAAC;QACD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,GAAG,KAAK,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;QACnF,OAAO,SAAS,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,GAAG,SAAS,CAAC,CAAC;IAC7E,CAAC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function startMcpServer(): Promise<void>;
|