backpack-ontology 0.7.2 → 0.7.4

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.
@@ -0,0 +1,65 @@
1
+ import type { StorageBackend, LearningGraphData, LearningGraphSummary } from "../core/types.js";
2
+ /**
3
+ * Write-through cache backend for cloud backpack data.
4
+ *
5
+ * Reads come from local cache files (fast, offline-capable).
6
+ * Writes go to the cloud relay API over the network, then update
7
+ * the local cache on success.
8
+ *
9
+ * Cache layout:
10
+ * ~/.cache/backpack/cloud/
11
+ * ├── meta.json
12
+ * ├── graphs/<name>/data.json
13
+ * └── kb/<doc-id>.json
14
+ */
15
+ export declare class CloudCacheBackend implements StorageBackend {
16
+ private cachePath;
17
+ private getAuth;
18
+ constructor(cachePath: string, getAuth: () => Promise<{
19
+ token: string;
20
+ relayUrl: string;
21
+ } | null>);
22
+ /** Default cache directory following XDG_CACHE_HOME. */
23
+ static defaultCachePath(): string;
24
+ private graphsDir;
25
+ private graphDir;
26
+ private graphFile;
27
+ private kbDir;
28
+ private kbFile;
29
+ private metaFile;
30
+ private ensureDir;
31
+ private writeAtomic;
32
+ private authHeaders;
33
+ initialize(): Promise<void>;
34
+ listOntologies(): Promise<LearningGraphSummary[]>;
35
+ loadOntology(name: string): Promise<LearningGraphData>;
36
+ ontologyExists(name: string): Promise<boolean>;
37
+ saveOntology(name: string, data: LearningGraphData, _expectedVersion?: number): Promise<void>;
38
+ createOntology(name: string, description: string): Promise<LearningGraphData>;
39
+ deleteOntology(name: string): Promise<void>;
40
+ renameOntology(oldName: string, newName: string): Promise<void>;
41
+ cacheGraph(name: string, data: LearningGraphData): Promise<void>;
42
+ cacheKBDoc(doc: {
43
+ id: string;
44
+ [key: string]: unknown;
45
+ }): Promise<void>;
46
+ listCachedKBDocs(): Promise<{
47
+ id: string;
48
+ title: string;
49
+ tags: string[];
50
+ sourceGraphs: string[];
51
+ collection: string;
52
+ createdAt: string;
53
+ updatedAt: string;
54
+ }[]>;
55
+ readCachedKBDoc(id: string): Promise<Record<string, unknown>>;
56
+ refreshFromCloud(): Promise<{
57
+ graphs: number;
58
+ kbDocs: number;
59
+ }>;
60
+ clearCache(): Promise<void>;
61
+ getCacheMeta(): Promise<{
62
+ lastRefresh?: string;
63
+ } | null>;
64
+ }
65
+ //# sourceMappingURL=cloud-cache-backend.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cloud-cache-backend.d.ts","sourceRoot":"","sources":["../../src/storage/cloud-cache-backend.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,cAAc,EACd,iBAAiB,EACjB,oBAAoB,EACrB,MAAM,kBAAkB,CAAC;AAE1B;;;;;;;;;;;;GAYG;AACH,qBAAa,iBAAkB,YAAW,cAAc;IACtD,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,OAAO,CAA4D;gBAGzE,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,OAAO,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAMpE,wDAAwD;IACxD,MAAM,CAAC,gBAAgB,IAAI,MAAM;IAKjC,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,QAAQ;YAEF,SAAS;YAIT,WAAW;YAOX,WAAW;IAYnB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAK3B,cAAc,IAAI,OAAO,CAAC,oBAAoB,EAAE,CAAC;IA2BjD,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAiBtD,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAW9C,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,iBAAiB,EAAE,gBAAgB,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAc7F,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAqB7E,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAa3C,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAoB/D,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAIhE,UAAU,CAAC,GAAG,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAItE,gBAAgB,IAAI,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,EAAE,CAAC;QAAC,YAAY,EAAE,MAAM,EAAE,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAwB9J,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAK7D,gBAAgB,IAAI,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAqE/D,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAK3B,YAAY,IAAI,OAAO,CAAC;QAAE,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;CAQ/D"}
@@ -0,0 +1,305 @@
1
+ import * as fs from "node:fs/promises";
2
+ import * as path from "node:path";
3
+ import * as os from "node:os";
4
+ /**
5
+ * Write-through cache backend for cloud backpack data.
6
+ *
7
+ * Reads come from local cache files (fast, offline-capable).
8
+ * Writes go to the cloud relay API over the network, then update
9
+ * the local cache on success.
10
+ *
11
+ * Cache layout:
12
+ * ~/.cache/backpack/cloud/
13
+ * ├── meta.json
14
+ * ├── graphs/<name>/data.json
15
+ * └── kb/<doc-id>.json
16
+ */
17
+ export class CloudCacheBackend {
18
+ cachePath;
19
+ getAuth;
20
+ constructor(cachePath, getAuth) {
21
+ this.cachePath = cachePath;
22
+ this.getAuth = getAuth;
23
+ }
24
+ /** Default cache directory following XDG_CACHE_HOME. */
25
+ static defaultCachePath() {
26
+ const cacheHome = process.env.XDG_CACHE_HOME || path.join(os.homedir(), ".cache");
27
+ return path.join(cacheHome, "backpack", "cloud");
28
+ }
29
+ graphsDir() { return path.join(this.cachePath, "graphs"); }
30
+ graphDir(name) { return path.join(this.graphsDir(), name); }
31
+ graphFile(name) { return path.join(this.graphDir(name), "data.json"); }
32
+ kbDir() { return path.join(this.cachePath, "kb"); }
33
+ kbFile(id) { return path.join(this.kbDir(), `${id}.json`); }
34
+ metaFile() { return path.join(this.cachePath, "meta.json"); }
35
+ async ensureDir(dir) {
36
+ await fs.mkdir(dir, { recursive: true });
37
+ }
38
+ async writeAtomic(filePath, data) {
39
+ await this.ensureDir(path.dirname(filePath));
40
+ const tmp = filePath + ".tmp";
41
+ await fs.writeFile(tmp, data, "utf-8");
42
+ await fs.rename(tmp, filePath);
43
+ }
44
+ async authHeaders() {
45
+ const auth = await this.getAuth();
46
+ if (!auth)
47
+ throw new Error("Sign in to access cloud backpack");
48
+ return {
49
+ Authorization: `Bearer ${auth.token}`,
50
+ "Content-Type": "application/json",
51
+ relayUrl: auth.relayUrl,
52
+ };
53
+ }
54
+ // --- StorageBackend: reads (from cache) ---
55
+ async initialize() {
56
+ await this.ensureDir(this.graphsDir());
57
+ await this.ensureDir(this.kbDir());
58
+ }
59
+ async listOntologies() {
60
+ const summaries = [];
61
+ try {
62
+ const entries = await fs.readdir(this.graphsDir(), { withFileTypes: true });
63
+ for (const entry of entries) {
64
+ if (!entry.isDirectory())
65
+ continue;
66
+ const dataPath = path.join(this.graphsDir(), entry.name, "data.json");
67
+ try {
68
+ const raw = await fs.readFile(dataPath, "utf-8");
69
+ const data = JSON.parse(raw);
70
+ const typeMap = new Map();
71
+ for (const n of data.nodes ?? []) {
72
+ typeMap.set(n.type, (typeMap.get(n.type) ?? 0) + 1);
73
+ }
74
+ summaries.push({
75
+ name: entry.name,
76
+ description: data.metadata?.description || "",
77
+ nodeCount: data.nodes?.length ?? 0,
78
+ edgeCount: data.edges?.length ?? 0,
79
+ nodeTypes: Array.from(typeMap.entries()).map(([type, count]) => ({ type, count })),
80
+ });
81
+ }
82
+ catch { /* skip corrupt/missing cache files */ }
83
+ }
84
+ }
85
+ catch { /* empty cache */ }
86
+ return summaries;
87
+ }
88
+ async loadOntology(name) {
89
+ try {
90
+ const raw = await fs.readFile(this.graphFile(name), "utf-8");
91
+ return JSON.parse(raw);
92
+ }
93
+ catch {
94
+ // Cache miss — try fetching from relay
95
+ const { Authorization, relayUrl } = await this.authHeaders();
96
+ const res = await fetch(`${relayUrl}/api/graphs/${encodeURIComponent(name)}`, {
97
+ headers: { Authorization },
98
+ });
99
+ if (!res.ok)
100
+ throw new Error(`Graph "${name}" not found in cloud`);
101
+ const data = await res.json();
102
+ await this.cacheGraph(name, data);
103
+ return data;
104
+ }
105
+ }
106
+ async ontologyExists(name) {
107
+ try {
108
+ await fs.access(this.graphFile(name));
109
+ return true;
110
+ }
111
+ catch {
112
+ return false;
113
+ }
114
+ }
115
+ // --- StorageBackend: writes (to relay, then cache) ---
116
+ async saveOntology(name, data, _expectedVersion) {
117
+ const { Authorization, relayUrl } = await this.authHeaders();
118
+ const res = await fetch(`${relayUrl}/api/graphs/${encodeURIComponent(name)}`, {
119
+ method: "PUT",
120
+ headers: { Authorization, "Content-Type": "application/json" },
121
+ body: JSON.stringify(data),
122
+ });
123
+ if (!res.ok) {
124
+ const body = await res.text().catch(() => "");
125
+ throw new Error(`Cloud save failed (${res.status}): ${body}`);
126
+ }
127
+ await this.cacheGraph(name, data);
128
+ }
129
+ async createOntology(name, description) {
130
+ const now = new Date().toISOString();
131
+ const data = {
132
+ metadata: { name, description, createdAt: now, updatedAt: now },
133
+ nodes: [],
134
+ edges: [],
135
+ };
136
+ const { Authorization, relayUrl } = await this.authHeaders();
137
+ const res = await fetch(`${relayUrl}/api/graphs`, {
138
+ method: "POST",
139
+ headers: { Authorization, "Content-Type": "application/json" },
140
+ body: JSON.stringify({ name, description, data }),
141
+ });
142
+ if (!res.ok) {
143
+ const body = await res.text().catch(() => "");
144
+ throw new Error(`Cloud create failed (${res.status}): ${body}`);
145
+ }
146
+ await this.cacheGraph(name, data);
147
+ return data;
148
+ }
149
+ async deleteOntology(name) {
150
+ const { Authorization, relayUrl } = await this.authHeaders();
151
+ const res = await fetch(`${relayUrl}/api/graphs/${encodeURIComponent(name)}`, {
152
+ method: "DELETE",
153
+ headers: { Authorization },
154
+ });
155
+ if (!res.ok) {
156
+ const body = await res.text().catch(() => "");
157
+ throw new Error(`Cloud delete failed (${res.status}): ${body}`);
158
+ }
159
+ try {
160
+ await fs.rm(this.graphDir(name), { recursive: true });
161
+ }
162
+ catch { /* already gone */ }
163
+ }
164
+ async renameOntology(oldName, newName) {
165
+ const { Authorization, relayUrl } = await this.authHeaders();
166
+ const res = await fetch(`${relayUrl}/api/graphs/${encodeURIComponent(oldName)}/rename`, {
167
+ method: "POST",
168
+ headers: { Authorization, "Content-Type": "application/json" },
169
+ body: JSON.stringify({ name: newName }),
170
+ });
171
+ if (!res.ok) {
172
+ const body = await res.text().catch(() => "");
173
+ throw new Error(`Cloud rename failed (${res.status}): ${body}`);
174
+ }
175
+ try {
176
+ await this.ensureDir(this.graphDir(newName));
177
+ await fs.rename(this.graphFile(oldName), this.graphFile(newName));
178
+ await fs.rm(this.graphDir(oldName), { recursive: true });
179
+ }
180
+ catch { /* cache cleanup best-effort */ }
181
+ }
182
+ // --- Cache management ---
183
+ async cacheGraph(name, data) {
184
+ await this.writeAtomic(this.graphFile(name), JSON.stringify(data));
185
+ }
186
+ async cacheKBDoc(doc) {
187
+ await this.writeAtomic(this.kbFile(doc.id), JSON.stringify(doc));
188
+ }
189
+ async listCachedKBDocs() {
190
+ const docs = [];
191
+ try {
192
+ const entries = await fs.readdir(this.kbDir());
193
+ for (const entry of entries) {
194
+ if (!entry.endsWith(".json"))
195
+ continue;
196
+ try {
197
+ const raw = await fs.readFile(path.join(this.kbDir(), entry), "utf-8");
198
+ const doc = JSON.parse(raw);
199
+ docs.push({
200
+ id: doc.id,
201
+ title: doc.title || doc.id,
202
+ tags: doc.tags || [],
203
+ sourceGraphs: doc.sourceGraphs || [],
204
+ collection: doc.collection || "cloud",
205
+ createdAt: doc.createdAt || "",
206
+ updatedAt: doc.updatedAt || "",
207
+ });
208
+ }
209
+ catch { /* skip corrupt */ }
210
+ }
211
+ }
212
+ catch { /* empty cache */ }
213
+ return docs;
214
+ }
215
+ async readCachedKBDoc(id) {
216
+ const raw = await fs.readFile(this.kbFile(id), "utf-8");
217
+ return JSON.parse(raw);
218
+ }
219
+ async refreshFromCloud() {
220
+ const { Authorization, relayUrl } = await this.authHeaders();
221
+ let graphCount = 0;
222
+ let kbCount = 0;
223
+ // Refresh graphs
224
+ const graphsRes = await fetch(`${relayUrl}/api/graphs`, { headers: { Authorization } });
225
+ if (graphsRes.ok) {
226
+ const graphs = await graphsRes.json();
227
+ const cloudNames = new Set();
228
+ for (const g of graphs) {
229
+ cloudNames.add(g.name);
230
+ if (g.encrypted)
231
+ continue; // skip encrypted (can't cache without key)
232
+ try {
233
+ const dataRes = await fetch(`${relayUrl}/api/graphs/${encodeURIComponent(g.name)}`, { headers: { Authorization } });
234
+ if (dataRes.ok) {
235
+ const data = await dataRes.json();
236
+ await this.cacheGraph(g.name, data);
237
+ graphCount++;
238
+ }
239
+ }
240
+ catch { /* skip individual failures */ }
241
+ }
242
+ // Remove cached graphs that no longer exist on the cloud
243
+ try {
244
+ const cached = await fs.readdir(this.graphsDir(), { withFileTypes: true });
245
+ for (const entry of cached) {
246
+ if (entry.isDirectory() && !cloudNames.has(entry.name)) {
247
+ await fs.rm(path.join(this.graphsDir(), entry.name), { recursive: true });
248
+ }
249
+ }
250
+ }
251
+ catch { /* no cache dir yet */ }
252
+ }
253
+ // Refresh KB docs
254
+ const kbRes = await fetch(`${relayUrl}/api/kb/documents?limit=1000`, { headers: { Authorization } });
255
+ if (kbRes.ok) {
256
+ const { documents } = await kbRes.json();
257
+ const cloudDocIds = new Set();
258
+ for (const d of documents) {
259
+ cloudDocIds.add(d.id);
260
+ try {
261
+ const docRes = await fetch(`${relayUrl}/api/kb/documents/${encodeURIComponent(d.id)}`, { headers: { Authorization } });
262
+ if (docRes.ok) {
263
+ const doc = await docRes.json();
264
+ await this.cacheKBDoc(doc);
265
+ kbCount++;
266
+ }
267
+ }
268
+ catch { /* skip individual failures */ }
269
+ }
270
+ // Remove cached KB docs that no longer exist on the cloud
271
+ try {
272
+ const cached = await fs.readdir(this.kbDir());
273
+ for (const f of cached) {
274
+ const id = f.replace(/\.json$/, "");
275
+ if (f.endsWith(".json") && !cloudDocIds.has(id)) {
276
+ await fs.unlink(path.join(this.kbDir(), f));
277
+ }
278
+ }
279
+ }
280
+ catch { /* no cache dir yet */ }
281
+ }
282
+ // Update meta
283
+ await this.writeAtomic(this.metaFile(), JSON.stringify({
284
+ lastRefresh: new Date().toISOString(),
285
+ }));
286
+ return { graphs: graphCount, kbDocs: kbCount };
287
+ }
288
+ async clearCache() {
289
+ try {
290
+ await fs.rm(this.cachePath, { recursive: true });
291
+ }
292
+ catch { /* already clean */ }
293
+ await this.initialize();
294
+ }
295
+ async getCacheMeta() {
296
+ try {
297
+ const raw = await fs.readFile(this.metaFile(), "utf-8");
298
+ return JSON.parse(raw);
299
+ }
300
+ catch {
301
+ return null;
302
+ }
303
+ }
304
+ }
305
+ //# sourceMappingURL=cloud-cache-backend.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cloud-cache-backend.js","sourceRoot":"","sources":["../../src/storage/cloud-cache-backend.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "backpack-ontology",
3
- "version": "0.7.2",
3
+ "version": "0.7.4",
4
4
  "description": "A persistent learning graph engine for Claude Code via MCP — structured knowledge that carries forward across sessions",
5
5
  "license": "Apache-2.0",
6
6
  "author": "Noah Irzinger",