engram-sdk 0.5.4 → 0.5.6

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 @@
1
+ {"version":3,"file":"hosted-client.d.ts","sourceRoot":"","sources":["../src/hosted-client.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAQH,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;CAChB;AAeD,wBAAgB,eAAe,IAAI,YAAY,GAAG,IAAI,CAKrD;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAI1D;AAED,wBAAgB,iBAAiB,SAIhC;AAID,qBAAa,YAAY;IACvB,OAAO,CAAC,GAAG,CAAS;IACpB,OAAO,CAAC,MAAM,CAAS;gBAEX,MAAM,CAAC,EAAE,YAAY;YAOnB,OAAO;IAgCrB,uCAAuC;IACjC,MAAM,IAAI,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAI5D,yCAAyC;IACnC,QAAQ,CAAC,KAAK,EAAE;QACpB,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;QACpB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;QAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,GAAG,OAAO,CAAC,GAAG,CAAC;IAIhB,4CAA4C;IACtC,MAAM,CAAC,KAAK,EAAE;QAClB,OAAO,EAAE,MAAM,CAAC;QAChB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;QACpB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;QAClB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;KAClB,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAMlB,sBAAsB;IAChB,KAAK,IAAI,OAAO,CAAC,GAAG,CAAC;IAI3B,oBAAoB;IACd,QAAQ,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IAKhC,sBAAsB;IAChB,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,UAAQ,GAAG,OAAO,CAAC,GAAG,CAAC;IAKpD,wBAAwB;IAClB,WAAW,IAAI,OAAO,CAAC,GAAG,CAAC;IAIjC,uBAAuB;IACjB,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC;CAG9B;AAID;;;GAGG;AACH,wBAAsB,eAAe,CACnC,YAAY,EAAE,KAAK,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,CAAC,EAC9E,YAAY,EAAE,YAAY,EAC1B,KAAK,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,GACnG,OAAO,CAAC,KAAK,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,OAAO,GAAG,QAAQ,CAAC;IAAC,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,CAAC,CAAC,CA+BvG"}
@@ -0,0 +1,154 @@
1
+ /**
2
+ * Hosted API client — thin HTTP wrapper for the Engram hosted vault.
3
+ * Used by the CLI when `--shared` / `--hosted` flags are set, or for
4
+ * federated recall (querying both local + hosted).
5
+ */
6
+ import { readFileSync, writeFileSync, existsSync, mkdirSync } from 'fs';
7
+ import { join } from 'path';
8
+ import { homedir } from 'os';
9
+ const CONFIG_DIR = join(homedir(), '.config', 'engram');
10
+ const CONFIG_PATH = join(CONFIG_DIR, 'config.json');
11
+ function readConfig() {
12
+ if (!existsSync(CONFIG_PATH))
13
+ return {};
14
+ try {
15
+ return JSON.parse(readFileSync(CONFIG_PATH, 'utf-8'));
16
+ }
17
+ catch {
18
+ return {};
19
+ }
20
+ }
21
+ function writeConfig(config) {
22
+ mkdirSync(CONFIG_DIR, { recursive: true });
23
+ writeFileSync(CONFIG_PATH, JSON.stringify(config, null, 2));
24
+ }
25
+ export function getHostedConfig() {
26
+ const config = readConfig();
27
+ const hosted = config.hosted;
28
+ if (!hosted?.url || !hosted?.apiKey)
29
+ return null;
30
+ return { url: hosted.url, apiKey: hosted.apiKey };
31
+ }
32
+ export function setHostedConfig(url, apiKey) {
33
+ const config = readConfig();
34
+ config.hosted = { url: url.replace(/\/+$/, ''), apiKey };
35
+ writeConfig(config);
36
+ }
37
+ export function clearHostedConfig() {
38
+ const config = readConfig();
39
+ delete config.hosted;
40
+ writeConfig(config);
41
+ }
42
+ // ── HTTP Client ─────────────────────────────────────────────
43
+ export class HostedClient {
44
+ url;
45
+ apiKey;
46
+ constructor(config) {
47
+ const c = config ?? getHostedConfig();
48
+ if (!c)
49
+ throw new Error('Not connected to a hosted vault. Run: engram connect <url> --api-key <key>');
50
+ this.url = c.url.replace(/\/+$/, '');
51
+ this.apiKey = c.apiKey;
52
+ }
53
+ async request(method, path, body) {
54
+ const url = `${this.url}${path}`;
55
+ const headers = {
56
+ 'Authorization': `Bearer ${this.apiKey}`,
57
+ 'Content-Type': 'application/json',
58
+ };
59
+ const res = await fetch(url, {
60
+ method,
61
+ headers,
62
+ body: body ? JSON.stringify(body) : undefined,
63
+ });
64
+ if (!res.ok) {
65
+ const text = await res.text();
66
+ let msg;
67
+ try {
68
+ const json = JSON.parse(text);
69
+ msg = json.message || json.error || text;
70
+ }
71
+ catch {
72
+ msg = text;
73
+ }
74
+ throw new Error(`Hosted API error (${res.status}): ${msg}`);
75
+ }
76
+ const contentType = res.headers.get('content-type') ?? '';
77
+ if (contentType.includes('application/json')) {
78
+ return res.json();
79
+ }
80
+ return res.text();
81
+ }
82
+ /** Verify the connection is working */
83
+ async health() {
84
+ return this.request('GET', '/health');
85
+ }
86
+ /** Store a memory on the hosted vault */
87
+ async remember(input) {
88
+ return this.request('POST', '/v1/memories', input);
89
+ }
90
+ /** Recall memories from the hosted vault */
91
+ async recall(input) {
92
+ // Use POST for recall (supports richer query)
93
+ const result = await this.request('POST', '/v1/memories/recall', input);
94
+ return Array.isArray(result) ? result : (result.memories ?? []);
95
+ }
96
+ /** Get vault stats */
97
+ async stats() {
98
+ return this.request('GET', '/v1/stats');
99
+ }
100
+ /** List entities */
101
+ async entities() {
102
+ const result = await this.request('GET', '/v1/entities');
103
+ return Array.isArray(result) ? result : (result.entities ?? []);
104
+ }
105
+ /** Forget a memory */
106
+ async forget(id, hard = false) {
107
+ const query = hard ? '?hard=true' : '';
108
+ return this.request('DELETE', `/v1/memories/${id}${query}`);
109
+ }
110
+ /** Run consolidation */
111
+ async consolidate() {
112
+ return this.request('POST', '/v1/consolidate', {});
113
+ }
114
+ /** Get account info */
115
+ async account() {
116
+ return this.request('GET', '/v1/account');
117
+ }
118
+ }
119
+ // ── Federated Recall ────────────────────────────────────────
120
+ /**
121
+ * Query both local vault and hosted vault, merge results by relevance score.
122
+ * Deduplicates by content similarity (exact match on first 100 chars).
123
+ */
124
+ export async function federatedRecall(localResults, hostedClient, input) {
125
+ // Fetch from hosted in parallel (local results already provided)
126
+ let hostedResults = [];
127
+ try {
128
+ hostedResults = await hostedClient.recall(input);
129
+ }
130
+ catch (err) {
131
+ // Don't fail federated recall if hosted is down
132
+ console.error(` ⚠ Hosted recall failed: ${err.message}`);
133
+ }
134
+ // Tag sources
135
+ const tagged = [
136
+ ...localResults.map(r => ({ ...r, source: 'local' })),
137
+ ...hostedResults.map(r => ({ ...r, source: 'hosted' })),
138
+ ];
139
+ // Deduplicate by content prefix (first 100 chars)
140
+ const seen = new Set();
141
+ const deduped = tagged.filter(r => {
142
+ const key = r.content?.slice(0, 100)?.toLowerCase() ?? '';
143
+ if (seen.has(key))
144
+ return false;
145
+ seen.add(key);
146
+ return true;
147
+ });
148
+ // Sort by score descending (if available)
149
+ deduped.sort((a, b) => (b.score ?? 0) - (a.score ?? 0));
150
+ // Limit
151
+ const limit = input.limit ?? 20;
152
+ return deduped.slice(0, limit);
153
+ }
154
+ //# sourceMappingURL=hosted-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hosted-client.js","sourceRoot":"","sources":["../src/hosted-client.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"hosted.d.ts","sourceRoot":"","sources":["../src/hosted.ts"],"names":[],"mappings":";AAmTA,iBAAS,WAAW,SAkHnB;AAeD,OAAO,EAAE,WAAW,EAAE,CAAC"}
1
+ {"version":3,"file":"hosted.d.ts","sourceRoot":"","sources":["../src/hosted.ts"],"names":[],"mappings":";AA8pBA,iBAAS,WAAW,SA4KnB;AAiBD,OAAO,EAAE,WAAW,EAAE,CAAC"}