@brain-protocol/mcp 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 +21 -0
- package/README.md +216 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +41 -0
- package/dist/index.js.map +1 -0
- package/dist/schemas.d.ts +96 -0
- package/dist/schemas.d.ts.map +1 -0
- package/dist/schemas.js +52 -0
- package/dist/schemas.js.map +1 -0
- package/dist/server.d.ts +4 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +27 -0
- package/dist/server.js.map +1 -0
- package/dist/store/adapter.d.ts +19 -0
- package/dist/store/adapter.d.ts.map +1 -0
- package/dist/store/adapter.js +2 -0
- package/dist/store/adapter.js.map +1 -0
- package/dist/store/cloud.d.ts +25 -0
- package/dist/store/cloud.d.ts.map +1 -0
- package/dist/store/cloud.js +151 -0
- package/dist/store/cloud.js.map +1 -0
- package/dist/store/paths.d.ts +4 -0
- package/dist/store/paths.d.ts.map +1 -0
- package/dist/store/paths.js +33 -0
- package/dist/store/paths.js.map +1 -0
- package/dist/store/sqlite.d.ts +22 -0
- package/dist/store/sqlite.d.ts.map +1 -0
- package/dist/store/sqlite.js +292 -0
- package/dist/store/sqlite.js.map +1 -0
- package/dist/tools/archive.d.ts +3 -0
- package/dist/tools/archive.d.ts.map +1 -0
- package/dist/tools/archive.js +6 -0
- package/dist/tools/archive.js.map +1 -0
- package/dist/tools/edge.d.ts +3 -0
- package/dist/tools/edge.d.ts.map +1 -0
- package/dist/tools/edge.js +6 -0
- package/dist/tools/edge.js.map +1 -0
- package/dist/tools/export.d.ts +3 -0
- package/dist/tools/export.d.ts.map +1 -0
- package/dist/tools/export.js +6 -0
- package/dist/tools/export.js.map +1 -0
- package/dist/tools/graph.d.ts +3 -0
- package/dist/tools/graph.d.ts.map +1 -0
- package/dist/tools/graph.js +6 -0
- package/dist/tools/graph.js.map +1 -0
- package/dist/tools/index.d.ts +236 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +136 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/prove.d.ts +5 -0
- package/dist/tools/prove.d.ts.map +1 -0
- package/dist/tools/prove.js +10 -0
- package/dist/tools/prove.js.map +1 -0
- package/dist/tools/query.d.ts +6 -0
- package/dist/tools/query.d.ts.map +1 -0
- package/dist/tools/query.js +6 -0
- package/dist/tools/query.js.map +1 -0
- package/dist/tools/stats.d.ts +3 -0
- package/dist/tools/stats.d.ts.map +1 -0
- package/dist/tools/stats.js +4 -0
- package/dist/tools/stats.js.map +1 -0
- package/dist/tools/verify.d.ts +5 -0
- package/dist/tools/verify.d.ts.map +1 -0
- package/dist/tools/verify.js +10 -0
- package/dist/tools/verify.js.map +1 -0
- package/dist/types.d.ts +81 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +47 -0
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
export class CloudStore {
|
|
2
|
+
mode = "cloud";
|
|
3
|
+
baseUrl;
|
|
4
|
+
apiKey;
|
|
5
|
+
constructor(baseUrl, apiKey) {
|
|
6
|
+
this.baseUrl = baseUrl.replace(/\/$/, "");
|
|
7
|
+
this.apiKey = apiKey;
|
|
8
|
+
}
|
|
9
|
+
async initialize() {
|
|
10
|
+
// Verify connectivity
|
|
11
|
+
const res = await this.fetch("/health");
|
|
12
|
+
if (!res.ok) {
|
|
13
|
+
throw new Error(`Cloud store initialization failed: ${res.status} ${res.statusText}`);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
async close() {
|
|
17
|
+
// No-op for HTTP client
|
|
18
|
+
}
|
|
19
|
+
async fetch(path, options) {
|
|
20
|
+
const headers = {
|
|
21
|
+
"Content-Type": "application/json",
|
|
22
|
+
...options?.headers,
|
|
23
|
+
};
|
|
24
|
+
if (this.apiKey) {
|
|
25
|
+
headers["Authorization"] = `Bearer ${this.apiKey}`;
|
|
26
|
+
}
|
|
27
|
+
return globalThis.fetch(`${this.baseUrl}${path}`, {
|
|
28
|
+
...options,
|
|
29
|
+
headers,
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
async fetchJson(path, options) {
|
|
33
|
+
const res = await this.fetch(path, options);
|
|
34
|
+
if (!res.ok) {
|
|
35
|
+
const text = await res.text().catch(() => "Unknown error");
|
|
36
|
+
throw new Error(`Cloud API error ${res.status}: ${text}`);
|
|
37
|
+
}
|
|
38
|
+
const body = await res.json();
|
|
39
|
+
// Brain API wraps responses in { success, data }
|
|
40
|
+
if (body && typeof body === "object" && "data" in body) {
|
|
41
|
+
return body.data;
|
|
42
|
+
}
|
|
43
|
+
return body;
|
|
44
|
+
}
|
|
45
|
+
async query(options) {
|
|
46
|
+
const params = new URLSearchParams();
|
|
47
|
+
if (options.q)
|
|
48
|
+
params.set("q", options.q);
|
|
49
|
+
if (options.category)
|
|
50
|
+
params.set("category", options.category);
|
|
51
|
+
if (options.author)
|
|
52
|
+
params.set("author", options.author);
|
|
53
|
+
if (options.tags)
|
|
54
|
+
params.set("tags", options.tags);
|
|
55
|
+
if (options.limit !== undefined)
|
|
56
|
+
params.set("limit", String(options.limit));
|
|
57
|
+
if (options.offset !== undefined)
|
|
58
|
+
params.set("offset", String(options.offset));
|
|
59
|
+
const qs = params.toString();
|
|
60
|
+
const path = `/api/knowledge${qs ? `?${qs}` : ""}`;
|
|
61
|
+
const res = await this.fetch(path);
|
|
62
|
+
if (!res.ok) {
|
|
63
|
+
throw new Error(`Cloud API error ${res.status}`);
|
|
64
|
+
}
|
|
65
|
+
const body = (await res.json());
|
|
66
|
+
const data = body.data;
|
|
67
|
+
const meta = body.meta;
|
|
68
|
+
// Brain API: { success, data: { entries, total } } or { success, data: [...], meta: { total } }
|
|
69
|
+
if (data && !Array.isArray(data) && data.entries) {
|
|
70
|
+
const entries = data.entries;
|
|
71
|
+
return { entries, total: data.total ?? entries.length };
|
|
72
|
+
}
|
|
73
|
+
if (Array.isArray(data)) {
|
|
74
|
+
return { entries: data, total: meta?.total ?? data.length };
|
|
75
|
+
}
|
|
76
|
+
return { entries: [], total: 0 };
|
|
77
|
+
}
|
|
78
|
+
async create(input) {
|
|
79
|
+
return this.fetchJson("/api/knowledge", {
|
|
80
|
+
method: "POST",
|
|
81
|
+
body: JSON.stringify({
|
|
82
|
+
content: input.content,
|
|
83
|
+
content_type: input.content_type ?? "markdown",
|
|
84
|
+
author: input.author ?? "user",
|
|
85
|
+
category: input.category ?? "documentation",
|
|
86
|
+
tags: input.tags ?? [],
|
|
87
|
+
confidence: input.confidence ?? 0.8,
|
|
88
|
+
metadata: input.metadata ?? {},
|
|
89
|
+
}),
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
async getById(id) {
|
|
93
|
+
try {
|
|
94
|
+
return await this.fetchJson(`/api/knowledge/${id}`);
|
|
95
|
+
}
|
|
96
|
+
catch {
|
|
97
|
+
return null;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
async createEdge(input) {
|
|
101
|
+
return this.fetchJson("/api/knowledge/edges", {
|
|
102
|
+
method: "POST",
|
|
103
|
+
body: JSON.stringify(input),
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
async traverseGraph(entryId, depth) {
|
|
107
|
+
const data = await this.fetchJson(`/api/knowledge/${entryId}/graph?depth=${depth}`);
|
|
108
|
+
return {
|
|
109
|
+
nodes: data.nodes ?? [],
|
|
110
|
+
totalNodes: data.totalNodes ?? data.nodes?.length ?? 0,
|
|
111
|
+
totalEdges: data.totalEdges ?? 0,
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
async getStats() {
|
|
115
|
+
return this.fetchJson("/health/stats");
|
|
116
|
+
}
|
|
117
|
+
async exportAll() {
|
|
118
|
+
const allEntries = [];
|
|
119
|
+
let offset = 0;
|
|
120
|
+
const limit = 100;
|
|
121
|
+
// Paginated export
|
|
122
|
+
while (true) {
|
|
123
|
+
const { entries } = await this.query({ limit, offset });
|
|
124
|
+
allEntries.push(...entries);
|
|
125
|
+
if (entries.length < limit)
|
|
126
|
+
break;
|
|
127
|
+
offset += limit;
|
|
128
|
+
}
|
|
129
|
+
return {
|
|
130
|
+
entries: allEntries,
|
|
131
|
+
edges: [],
|
|
132
|
+
exportedAt: new Date().toISOString(),
|
|
133
|
+
mode: "cloud",
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
async prove(entryId) {
|
|
137
|
+
return this.fetchJson(`/api/knowledge/${entryId}/anchor`, {
|
|
138
|
+
method: "POST",
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
async verify(entryId) {
|
|
142
|
+
const entry = await this.fetchJson(`/api/knowledge/${entryId}`);
|
|
143
|
+
return {
|
|
144
|
+
verified: !!entry.chain_hash,
|
|
145
|
+
contentHash: entry.chain_hash ?? null,
|
|
146
|
+
txHash: entry.proof_tx ?? null,
|
|
147
|
+
anchorId: entry.anchor_id ?? null,
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
//# sourceMappingURL=cloud.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cloud.js","sourceRoot":"","sources":["../../src/store/cloud.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../src/store/paths.ts"],"names":[],"mappings":"AAOA,wBAAgB,UAAU,IAAI,MAAM,CAmBnC;AAED,wBAAgB,SAAS,IAAI,MAAM,CAKlC;AAED,wBAAgB,aAAa,IAAI,MAAM,CAItC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { mkdirSync } from "node:fs";
|
|
2
|
+
import { homedir, platform } from "node:os";
|
|
3
|
+
import { dirname, join } from "node:path";
|
|
4
|
+
const APP_NAME = "brain-protocol";
|
|
5
|
+
const DB_FILENAME = "brain.db";
|
|
6
|
+
export function getDataDir() {
|
|
7
|
+
if (process.env.BRAIN_DB_PATH) {
|
|
8
|
+
return dirname(process.env.BRAIN_DB_PATH);
|
|
9
|
+
}
|
|
10
|
+
const os = platform();
|
|
11
|
+
if (os === "darwin") {
|
|
12
|
+
return join(homedir(), "Library", "Application Support", APP_NAME);
|
|
13
|
+
}
|
|
14
|
+
if (os === "win32") {
|
|
15
|
+
const appData = process.env.APPDATA || join(homedir(), "AppData", "Roaming");
|
|
16
|
+
return join(appData, APP_NAME);
|
|
17
|
+
}
|
|
18
|
+
// Linux and others: XDG spec
|
|
19
|
+
const xdgData = process.env.XDG_DATA_HOME || join(homedir(), ".local", "share");
|
|
20
|
+
return join(xdgData, APP_NAME);
|
|
21
|
+
}
|
|
22
|
+
export function getDbPath() {
|
|
23
|
+
if (process.env.BRAIN_DB_PATH) {
|
|
24
|
+
return process.env.BRAIN_DB_PATH;
|
|
25
|
+
}
|
|
26
|
+
return join(getDataDir(), DB_FILENAME);
|
|
27
|
+
}
|
|
28
|
+
export function ensureDataDir() {
|
|
29
|
+
const dir = getDataDir();
|
|
30
|
+
mkdirSync(dir, { recursive: true });
|
|
31
|
+
return dir;
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=paths.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/store/paths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAE1C,MAAM,QAAQ,GAAG,gBAAgB,CAAC;AAClC,MAAM,WAAW,GAAG,UAAU,CAAC;AAE/B,MAAM,UAAU,UAAU;IACxB,IAAI,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QAC9B,OAAO,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IAC5C,CAAC;IAED,MAAM,EAAE,GAAG,QAAQ,EAAE,CAAC;IAEtB,IAAI,EAAE,KAAK,QAAQ,EAAE,CAAC;QACpB,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,qBAAqB,EAAE,QAAQ,CAAC,CAAC;IACrE,CAAC;IAED,IAAI,EAAE,KAAK,OAAO,EAAE,CAAC;QACnB,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;QAC7E,OAAO,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IACjC,CAAC;IAED,6BAA6B;IAC7B,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;IAChF,OAAO,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,SAAS;IACvB,IAAI,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QAC9B,OAAO,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC;IACnC,CAAC;IACD,OAAO,IAAI,CAAC,UAAU,EAAE,EAAE,WAAW,CAAC,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,aAAa;IAC3B,MAAM,GAAG,GAAG,UAAU,EAAE,CAAC;IACzB,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACpC,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { StoreAdapter } from "./adapter.js";
|
|
2
|
+
import type { CreateEdgeInput, CreateEntryInput, ExportData, GraphResult, KnowledgeEdge, KnowledgeEntry, QueryOptions, StoreStats } from "../types.js";
|
|
3
|
+
export declare class SQLiteStore implements StoreAdapter {
|
|
4
|
+
readonly mode: "local";
|
|
5
|
+
private db;
|
|
6
|
+
private dbPath;
|
|
7
|
+
constructor(dbPath?: string);
|
|
8
|
+
initialize(): Promise<void>;
|
|
9
|
+
close(): Promise<void>;
|
|
10
|
+
private getDb;
|
|
11
|
+
query(options: QueryOptions): Promise<{
|
|
12
|
+
entries: KnowledgeEntry[];
|
|
13
|
+
total: number;
|
|
14
|
+
}>;
|
|
15
|
+
create(input: CreateEntryInput): Promise<KnowledgeEntry>;
|
|
16
|
+
getById(id: string): Promise<KnowledgeEntry | null>;
|
|
17
|
+
createEdge(input: CreateEdgeInput): Promise<KnowledgeEdge>;
|
|
18
|
+
traverseGraph(entryId: string, depth: number): Promise<GraphResult>;
|
|
19
|
+
getStats(): Promise<StoreStats>;
|
|
20
|
+
exportAll(): Promise<ExportData>;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=sqlite.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sqlite.d.ts","sourceRoot":"","sources":["../../src/store/sqlite.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEjD,OAAO,KAAK,EACV,eAAe,EACf,gBAAgB,EAChB,UAAU,EAEV,WAAW,EACX,aAAa,EACb,cAAc,EACd,YAAY,EACZ,UAAU,EACX,MAAM,aAAa,CAAC;AAgFrB,qBAAa,WAAY,YAAW,YAAY;IAC9C,QAAQ,CAAC,IAAI,EAAG,OAAO,CAAU;IACjC,OAAO,CAAC,EAAE,CAAkC;IAC5C,OAAO,CAAC,MAAM,CAAS;gBAEX,MAAM,CAAC,EAAE,MAAM;IAIrB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAW3B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAK5B,OAAO,CAAC,KAAK;IAKP,KAAK,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,cAAc,EAAE,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAuEnF,MAAM,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,cAAc,CAAC;IA2BxD,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAMnD,UAAU,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,aAAa,CAAC;IAe1D,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IA6EnE,QAAQ,IAAI,OAAO,CAAC,UAAU,CAAC;IA4B/B,SAAS,IAAI,OAAO,CAAC,UAAU,CAAC;CAavC"}
|
|
@@ -0,0 +1,292 @@
|
|
|
1
|
+
import Database from "better-sqlite3";
|
|
2
|
+
import { randomUUID } from "node:crypto";
|
|
3
|
+
import { ensureDataDir, getDbPath } from "./paths.js";
|
|
4
|
+
const SCHEMA_SQL = `
|
|
5
|
+
CREATE TABLE IF NOT EXISTS knowledge_entries (
|
|
6
|
+
id TEXT PRIMARY KEY,
|
|
7
|
+
content TEXT NOT NULL,
|
|
8
|
+
content_type TEXT NOT NULL DEFAULT 'markdown',
|
|
9
|
+
author TEXT NOT NULL DEFAULT 'user',
|
|
10
|
+
category TEXT NOT NULL DEFAULT 'documentation',
|
|
11
|
+
tags TEXT NOT NULL DEFAULT '[]',
|
|
12
|
+
metadata TEXT NOT NULL DEFAULT '{}',
|
|
13
|
+
confidence REAL NOT NULL DEFAULT 0.8,
|
|
14
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
15
|
+
updated_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
16
|
+
);
|
|
17
|
+
|
|
18
|
+
CREATE TABLE IF NOT EXISTS knowledge_edges (
|
|
19
|
+
id TEXT PRIMARY KEY,
|
|
20
|
+
source_id TEXT NOT NULL REFERENCES knowledge_entries(id),
|
|
21
|
+
target_id TEXT NOT NULL REFERENCES knowledge_entries(id),
|
|
22
|
+
edge_type TEXT NOT NULL,
|
|
23
|
+
confidence REAL,
|
|
24
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
25
|
+
UNIQUE(source_id, target_id, edge_type)
|
|
26
|
+
);
|
|
27
|
+
|
|
28
|
+
CREATE INDEX IF NOT EXISTS idx_entries_category ON knowledge_entries(category);
|
|
29
|
+
CREATE INDEX IF NOT EXISTS idx_entries_author ON knowledge_entries(author);
|
|
30
|
+
CREATE INDEX IF NOT EXISTS idx_entries_created ON knowledge_entries(created_at DESC);
|
|
31
|
+
CREATE INDEX IF NOT EXISTS idx_edges_source ON knowledge_edges(source_id);
|
|
32
|
+
CREATE INDEX IF NOT EXISTS idx_edges_target ON knowledge_edges(target_id);
|
|
33
|
+
`;
|
|
34
|
+
const FTS_SQL = `
|
|
35
|
+
CREATE VIRTUAL TABLE IF NOT EXISTS knowledge_fts USING fts5(
|
|
36
|
+
content, tags,
|
|
37
|
+
content='knowledge_entries',
|
|
38
|
+
content_rowid='rowid'
|
|
39
|
+
);
|
|
40
|
+
|
|
41
|
+
CREATE TRIGGER IF NOT EXISTS ke_ai AFTER INSERT ON knowledge_entries BEGIN
|
|
42
|
+
INSERT INTO knowledge_fts(rowid, content, tags) VALUES (new.rowid, new.content, new.tags);
|
|
43
|
+
END;
|
|
44
|
+
|
|
45
|
+
CREATE TRIGGER IF NOT EXISTS ke_ad AFTER DELETE ON knowledge_entries BEGIN
|
|
46
|
+
INSERT INTO knowledge_fts(knowledge_fts, rowid, content, tags) VALUES ('delete', old.rowid, old.content, old.tags);
|
|
47
|
+
END;
|
|
48
|
+
|
|
49
|
+
CREATE TRIGGER IF NOT EXISTS ke_au AFTER UPDATE ON knowledge_entries BEGIN
|
|
50
|
+
INSERT INTO knowledge_fts(knowledge_fts, rowid, content, tags) VALUES ('delete', old.rowid, old.content, old.tags);
|
|
51
|
+
INSERT INTO knowledge_fts(rowid, content, tags) VALUES (new.rowid, new.content, new.tags);
|
|
52
|
+
END;
|
|
53
|
+
`;
|
|
54
|
+
function parseEntry(row) {
|
|
55
|
+
return {
|
|
56
|
+
id: row.id,
|
|
57
|
+
content: row.content,
|
|
58
|
+
content_type: row.content_type,
|
|
59
|
+
author: row.author,
|
|
60
|
+
category: row.category,
|
|
61
|
+
tags: JSON.parse(row.tags || "[]"),
|
|
62
|
+
metadata: JSON.parse(row.metadata || "{}"),
|
|
63
|
+
confidence: row.confidence,
|
|
64
|
+
created_at: row.created_at,
|
|
65
|
+
updated_at: row.updated_at,
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
function parseEdge(row) {
|
|
69
|
+
return {
|
|
70
|
+
id: row.id,
|
|
71
|
+
source_id: row.source_id,
|
|
72
|
+
target_id: row.target_id,
|
|
73
|
+
edge_type: row.edge_type,
|
|
74
|
+
confidence: row.confidence ?? null,
|
|
75
|
+
created_at: row.created_at,
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
export class SQLiteStore {
|
|
79
|
+
mode = "local";
|
|
80
|
+
db = null;
|
|
81
|
+
dbPath;
|
|
82
|
+
constructor(dbPath) {
|
|
83
|
+
this.dbPath = dbPath || getDbPath();
|
|
84
|
+
}
|
|
85
|
+
async initialize() {
|
|
86
|
+
if (!this.dbPath.includes(":memory:")) {
|
|
87
|
+
ensureDataDir();
|
|
88
|
+
}
|
|
89
|
+
this.db = new Database(this.dbPath);
|
|
90
|
+
this.db.pragma("journal_mode = WAL");
|
|
91
|
+
this.db.pragma("foreign_keys = ON");
|
|
92
|
+
this.db.exec(SCHEMA_SQL);
|
|
93
|
+
this.db.exec(FTS_SQL);
|
|
94
|
+
}
|
|
95
|
+
async close() {
|
|
96
|
+
this.db?.close();
|
|
97
|
+
this.db = null;
|
|
98
|
+
}
|
|
99
|
+
getDb() {
|
|
100
|
+
if (!this.db)
|
|
101
|
+
throw new Error("Store not initialized. Call initialize() first.");
|
|
102
|
+
return this.db;
|
|
103
|
+
}
|
|
104
|
+
async query(options) {
|
|
105
|
+
const db = this.getDb();
|
|
106
|
+
const limit = options.limit ?? 10;
|
|
107
|
+
const offset = options.offset ?? 0;
|
|
108
|
+
if (options.q) {
|
|
109
|
+
// FTS search
|
|
110
|
+
const conditions = [];
|
|
111
|
+
const params = [];
|
|
112
|
+
let sql = `SELECT ke.* FROM knowledge_entries ke
|
|
113
|
+
INNER JOIN knowledge_fts fts ON ke.rowid = fts.rowid
|
|
114
|
+
WHERE knowledge_fts MATCH ?`;
|
|
115
|
+
params.push(options.q);
|
|
116
|
+
if (options.category) {
|
|
117
|
+
conditions.push("ke.category = ?");
|
|
118
|
+
params.push(options.category);
|
|
119
|
+
}
|
|
120
|
+
if (options.author) {
|
|
121
|
+
conditions.push("ke.author = ?");
|
|
122
|
+
params.push(options.author);
|
|
123
|
+
}
|
|
124
|
+
if (options.tags) {
|
|
125
|
+
conditions.push("ke.tags LIKE ?");
|
|
126
|
+
params.push(`%${options.tags}%`);
|
|
127
|
+
}
|
|
128
|
+
if (conditions.length > 0) {
|
|
129
|
+
sql += ` AND ${conditions.join(" AND ")}`;
|
|
130
|
+
}
|
|
131
|
+
const countSql = sql.replace("ke.*", "COUNT(*) as count");
|
|
132
|
+
const totalRow = db.prepare(countSql).get(...params);
|
|
133
|
+
const total = totalRow?.count ?? 0;
|
|
134
|
+
sql += ` ORDER BY rank LIMIT ? OFFSET ?`;
|
|
135
|
+
params.push(limit, offset);
|
|
136
|
+
const rows = db.prepare(sql).all(...params);
|
|
137
|
+
return { entries: rows.map(parseEntry), total };
|
|
138
|
+
}
|
|
139
|
+
// No FTS, just filters
|
|
140
|
+
const conditions = [];
|
|
141
|
+
const params = [];
|
|
142
|
+
if (options.category) {
|
|
143
|
+
conditions.push("category = ?");
|
|
144
|
+
params.push(options.category);
|
|
145
|
+
}
|
|
146
|
+
if (options.author) {
|
|
147
|
+
conditions.push("author = ?");
|
|
148
|
+
params.push(options.author);
|
|
149
|
+
}
|
|
150
|
+
if (options.tags) {
|
|
151
|
+
conditions.push("tags LIKE ?");
|
|
152
|
+
params.push(`%${options.tags}%`);
|
|
153
|
+
}
|
|
154
|
+
const where = conditions.length > 0 ? `WHERE ${conditions.join(" AND ")}` : "";
|
|
155
|
+
const countSql = `SELECT COUNT(*) as count FROM knowledge_entries ${where}`;
|
|
156
|
+
const totalRow = db.prepare(countSql).get(...params);
|
|
157
|
+
const total = totalRow?.count ?? 0;
|
|
158
|
+
const sql = `SELECT * FROM knowledge_entries ${where} ORDER BY created_at DESC LIMIT ? OFFSET ?`;
|
|
159
|
+
const rows = db.prepare(sql).all(...params, limit, offset);
|
|
160
|
+
return { entries: rows.map(parseEntry), total };
|
|
161
|
+
}
|
|
162
|
+
async create(input) {
|
|
163
|
+
const db = this.getDb();
|
|
164
|
+
const id = randomUUID();
|
|
165
|
+
const now = new Date().toISOString().replace("T", " ").replace("Z", "");
|
|
166
|
+
const stmt = db.prepare(`
|
|
167
|
+
INSERT INTO knowledge_entries (id, content, content_type, author, category, tags, metadata, confidence, created_at, updated_at)
|
|
168
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
169
|
+
`);
|
|
170
|
+
stmt.run(id, input.content, input.content_type ?? "markdown", input.author ?? "user", input.category ?? "documentation", JSON.stringify(input.tags ?? []), JSON.stringify(input.metadata ?? {}), input.confidence ?? 0.8, now, now);
|
|
171
|
+
const row = db.prepare("SELECT * FROM knowledge_entries WHERE id = ?").get(id);
|
|
172
|
+
return parseEntry(row);
|
|
173
|
+
}
|
|
174
|
+
async getById(id) {
|
|
175
|
+
const db = this.getDb();
|
|
176
|
+
const row = db.prepare("SELECT * FROM knowledge_entries WHERE id = ?").get(id);
|
|
177
|
+
return row ? parseEntry(row) : null;
|
|
178
|
+
}
|
|
179
|
+
async createEdge(input) {
|
|
180
|
+
const db = this.getDb();
|
|
181
|
+
const id = randomUUID();
|
|
182
|
+
const stmt = db.prepare(`
|
|
183
|
+
INSERT INTO knowledge_edges (id, source_id, target_id, edge_type, confidence)
|
|
184
|
+
VALUES (?, ?, ?, ?, ?)
|
|
185
|
+
`);
|
|
186
|
+
stmt.run(id, input.source_id, input.target_id, input.edge_type, input.confidence ?? null);
|
|
187
|
+
const row = db.prepare("SELECT * FROM knowledge_edges WHERE id = ?").get(id);
|
|
188
|
+
return parseEdge(row);
|
|
189
|
+
}
|
|
190
|
+
async traverseGraph(entryId, depth) {
|
|
191
|
+
const db = this.getDb();
|
|
192
|
+
const maxDepth = Math.min(depth, 5);
|
|
193
|
+
// Recursive CTE for graph traversal (SQLite compatible)
|
|
194
|
+
const rows = db.prepare(`
|
|
195
|
+
WITH RECURSIVE graph(id, depth, path) AS (
|
|
196
|
+
SELECT id, 0, id
|
|
197
|
+
FROM knowledge_entries
|
|
198
|
+
WHERE id = ?
|
|
199
|
+
|
|
200
|
+
UNION ALL
|
|
201
|
+
|
|
202
|
+
SELECT ke.id, g.depth + 1, g.path || ',' || ke.id
|
|
203
|
+
FROM graph g
|
|
204
|
+
JOIN knowledge_edges e ON (e.source_id = g.id OR e.target_id = g.id)
|
|
205
|
+
JOIN knowledge_entries ke ON (
|
|
206
|
+
ke.id = CASE WHEN e.source_id = g.id THEN e.target_id ELSE e.source_id END
|
|
207
|
+
)
|
|
208
|
+
WHERE g.depth < ?
|
|
209
|
+
AND instr(g.path, ke.id) = 0
|
|
210
|
+
)
|
|
211
|
+
SELECT DISTINCT g.id, MIN(g.depth) as depth
|
|
212
|
+
FROM graph g
|
|
213
|
+
GROUP BY g.id
|
|
214
|
+
ORDER BY depth ASC
|
|
215
|
+
`).all(entryId, maxDepth);
|
|
216
|
+
if (rows.length === 0) {
|
|
217
|
+
return { nodes: [], totalNodes: 0, totalEdges: 0 };
|
|
218
|
+
}
|
|
219
|
+
const entryIds = rows.map((r) => r.id);
|
|
220
|
+
const depthMap = new Map(rows.map((r) => [r.id, r.depth]));
|
|
221
|
+
// Fetch all entries
|
|
222
|
+
const placeholders = entryIds.map(() => "?").join(",");
|
|
223
|
+
const entries = db
|
|
224
|
+
.prepare(`SELECT * FROM knowledge_entries WHERE id IN (${placeholders})`)
|
|
225
|
+
.all(...entryIds);
|
|
226
|
+
// Fetch all edges between discovered entries
|
|
227
|
+
const edges = db
|
|
228
|
+
.prepare(`SELECT * FROM knowledge_edges WHERE source_id IN (${placeholders}) AND target_id IN (${placeholders})`)
|
|
229
|
+
.all(...entryIds, ...entryIds);
|
|
230
|
+
const parsedEdges = edges.map(parseEdge);
|
|
231
|
+
const edgesByEntry = new Map();
|
|
232
|
+
for (const edge of parsedEdges) {
|
|
233
|
+
if (!edgesByEntry.has(edge.source_id))
|
|
234
|
+
edgesByEntry.set(edge.source_id, []);
|
|
235
|
+
edgesByEntry.get(edge.source_id).push(edge);
|
|
236
|
+
if (edge.source_id !== edge.target_id) {
|
|
237
|
+
if (!edgesByEntry.has(edge.target_id))
|
|
238
|
+
edgesByEntry.set(edge.target_id, []);
|
|
239
|
+
edgesByEntry.get(edge.target_id).push(edge);
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
const nodes = entries.map((row) => {
|
|
243
|
+
const entry = parseEntry(row);
|
|
244
|
+
return {
|
|
245
|
+
entry,
|
|
246
|
+
edges: edgesByEntry.get(entry.id) || [],
|
|
247
|
+
depth: depthMap.get(entry.id) ?? 0,
|
|
248
|
+
};
|
|
249
|
+
});
|
|
250
|
+
nodes.sort((a, b) => a.depth - b.depth);
|
|
251
|
+
return {
|
|
252
|
+
nodes,
|
|
253
|
+
totalNodes: nodes.length,
|
|
254
|
+
totalEdges: parsedEdges.length,
|
|
255
|
+
};
|
|
256
|
+
}
|
|
257
|
+
async getStats() {
|
|
258
|
+
const db = this.getDb();
|
|
259
|
+
const entryCount = db.prepare("SELECT COUNT(*) as count FROM knowledge_entries").get();
|
|
260
|
+
const edgeCount = db.prepare("SELECT COUNT(*) as count FROM knowledge_edges").get();
|
|
261
|
+
const avgConf = db.prepare("SELECT AVG(confidence) as avg FROM knowledge_entries").get();
|
|
262
|
+
const oldest = db.prepare("SELECT MIN(created_at) as min FROM knowledge_entries").get();
|
|
263
|
+
const newest = db.prepare("SELECT MAX(created_at) as max FROM knowledge_entries").get();
|
|
264
|
+
const catRows = db
|
|
265
|
+
.prepare("SELECT category, COUNT(*) as count FROM knowledge_entries GROUP BY category")
|
|
266
|
+
.all();
|
|
267
|
+
const categories = {};
|
|
268
|
+
for (const row of catRows) {
|
|
269
|
+
categories[row.category] = row.count;
|
|
270
|
+
}
|
|
271
|
+
return {
|
|
272
|
+
totalEntries: entryCount.count,
|
|
273
|
+
totalEdges: edgeCount.count,
|
|
274
|
+
categories,
|
|
275
|
+
avgConfidence: avgConf.avg ?? 0,
|
|
276
|
+
oldestEntry: oldest.min,
|
|
277
|
+
newestEntry: newest.max,
|
|
278
|
+
};
|
|
279
|
+
}
|
|
280
|
+
async exportAll() {
|
|
281
|
+
const db = this.getDb();
|
|
282
|
+
const entries = db.prepare("SELECT * FROM knowledge_entries ORDER BY created_at ASC").all();
|
|
283
|
+
const edges = db.prepare("SELECT * FROM knowledge_edges ORDER BY created_at ASC").all();
|
|
284
|
+
return {
|
|
285
|
+
entries: entries.map(parseEntry),
|
|
286
|
+
edges: edges.map(parseEdge),
|
|
287
|
+
exportedAt: new Date().toISOString(),
|
|
288
|
+
mode: "local",
|
|
289
|
+
};
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
//# sourceMappingURL=sqlite.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sqlite.js","sourceRoot":"","sources":["../../src/store/sqlite.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"archive.d.ts","sourceRoot":"","sources":["../../src/tools/archive.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAExD,wBAAsB,gBAAgB,CAAC,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,iDAGxF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"archive.js","sourceRoot":"","sources":["../../src/tools/archive.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AAGvD,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,KAAmB,EAAE,IAA6B;IACvF,MAAM,KAAK,GAAG,sBAAsB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACjD,OAAO,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC7B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"edge.d.ts","sourceRoot":"","sources":["../../src/tools/edge.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAExD,wBAAsB,UAAU,CAAC,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,gDAGlF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"edge.js","sourceRoot":"","sources":["../../src/tools/edge.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAGjD,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,KAAmB,EAAE,IAA6B;IACjF,MAAM,KAAK,GAAG,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC3C,OAAO,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;AACjC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"export.d.ts","sourceRoot":"","sources":["../../src/tools/export.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAExD,wBAAsB,UAAU,CAAC,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,6CAGlF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"export.js","sourceRoot":"","sources":["../../src/tools/export.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAG7C,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,KAAmB,EAAE,IAA6B;IACjF,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACzB,OAAO,KAAK,CAAC,SAAS,EAAE,CAAC;AAC3B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graph.d.ts","sourceRoot":"","sources":["../../src/tools/graph.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAExD,wBAAsB,QAAQ,CAAC,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,8CAGhF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graph.js","sourceRoot":"","sources":["../../src/tools/graph.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAG/C,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,KAAmB,EAAE,IAA6B;IAC/E,MAAM,KAAK,GAAG,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACzC,OAAO,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;AAC1D,CAAC"}
|