@mnemosyne_os/sdk 1.0.0 → 1.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/README.md CHANGED
@@ -13,7 +13,7 @@
13
13
 
14
14
  Mnemosyne OS is a sovereign, local-first AI memory runtime built on Electron.
15
15
  It runs on your machine, stores everything locally (SQLite + vector embeddings),
16
- and exposes an IPC/WebSocket API for Layer 2 apps to tap into its cognitive engine.
16
+ and exposes a WebSocket API for Layer 2 apps to tap into its cognitive engine.
17
17
 
18
18
  **No cloud. No telemetry. Your data stays on your machine.**
19
19
 
@@ -25,15 +25,14 @@ and exposes an IPC/WebSocket API for Layer 2 apps to tap into its cognitive engi
25
25
  |---------|---------|------|
26
26
  | [`@mnemosyne_os/forge`](https://www.npmjs.com/package/@mnemosyne_os/forge) | `1.4.7` | CLI — scaffold, chronicles, MCP server |
27
27
  | [`@mnemosyne_os/sync`](https://www.npmjs.com/package/@mnemosyne_os/sync) | `0.0.1` | P2P — multi-agent synchronization |
28
- | **`@mnemosyne_os/sdk`** | `1.0.0` | **SDK — build Layer 2 apps** |
28
+ | **`@mnemosyne_os/sdk`** | **`1.1.0`** | **SDK — build Layer 2 apps** |
29
29
 
30
30
  ---
31
31
 
32
32
  ## Requirements
33
33
 
34
- - **Mnemosyne OS Dev Edition** must be running on your machine
35
- - The SDK WebSocket server runs on `ws://127.0.0.1:7799` (localhost only)
36
- - Node.js ≥ 18
34
+ - **Mnemosyne OS Dev Edition** running on your machine (SDK WS Server on port 7799)
35
+ - Node.js 18 (for `MnemoClient`) OR any modern browser / Electron renderer (for `MnemoClientBrowser`)
37
36
 
38
37
  ---
39
38
 
@@ -45,7 +44,18 @@ npm install @mnemosyne_os/sdk
45
44
 
46
45
  ---
47
46
 
48
- ## Quick Start
47
+ ## Two Clients — Pick the Right One
48
+
49
+ | Client | Environment | Transport |
50
+ |--------|------------|-----------|
51
+ | `MnemoClientBrowser` | React, Vite, Next.js, Electron renderer | Native `WebSocket` API |
52
+ | `MnemoClient` | Node.js, Electron main process | `ws` package + IPC |
53
+
54
+ > **In most Layer 2 apps (Vite/React/Electron renderer), use `MnemoClientBrowser`.**
55
+
56
+ ---
57
+
58
+ ## Quick Start — Browser / React / Vite
49
59
 
50
60
  ### 1. Create your `app.manifest.json`
51
61
 
@@ -54,14 +64,51 @@ npm install @mnemosyne_os/sdk
54
64
  "id": "my-layer2-app",
55
65
  "name": "My Layer 2 App",
56
66
  "version": "1.0.0",
57
- "mnemosyne_sdk": "^1.0.0",
67
+ "mnemosyne_sdk": "^1.1.0",
58
68
  "scopes": ["vault:read:DEV", "vault:write:DEV"],
59
69
  "vaults": ["DEV"],
60
70
  "intents": ["INGEST", "QUERY"]
61
71
  }
62
72
  ```
63
73
 
64
- ### 2. Connect and use
74
+ ### 2. Connect in your React app
75
+
76
+ ```typescript
77
+ import { MnemoClientBrowser } from '@mnemosyne_os/sdk';
78
+ import type { AppManifest, Chronicle } from '@mnemosyne_os/sdk';
79
+
80
+ const MANIFEST: AppManifest = {
81
+ id: 'my-layer2-app', name: 'My Layer 2 App', version: '1.0.0',
82
+ mnemosyne_sdk: '^1.1.0',
83
+ scopes: ['vault:read:DEV', 'vault:write:DEV'],
84
+ vaults: ['DEV'],
85
+ intents: ['INGEST', 'QUERY'],
86
+ };
87
+
88
+ // Connect and register
89
+ const client = await MnemoClientBrowser.connect();
90
+ await client.register(MANIFEST);
91
+
92
+ // Ingest content
93
+ await client.ingest('My note to remember', 'NOTE', 'DEV');
94
+
95
+ // Semantic query
96
+ const chronicles: Chronicle[] = await client.query('my search', 'DEV', 10);
97
+
98
+ // Real-time push events from the OS
99
+ client.onPush((event) => {
100
+ if (event.type === 'chronicle:new') {
101
+ console.log('New chronicle from:', event.sourceApp);
102
+ }
103
+ });
104
+
105
+ // Graceful close
106
+ client.close();
107
+ ```
108
+
109
+ ---
110
+
111
+ ## Quick Start — Node.js External App
65
112
 
66
113
  ```typescript
67
114
  import { MnemoClient } from '@mnemosyne_os/sdk';
@@ -72,44 +119,75 @@ const client = await MnemoClient.connect({
72
119
  // transport: 'auto' → WebSocket if external, IPC if embedded in Mnemosyne OS
73
120
  });
74
121
 
75
- // Ingest content into the vault
76
- await client.ingest({
77
- content: 'My content to remember',
78
- spineType: 'NOTE',
79
- vault: 'DEV',
80
- });
81
-
82
- // Semantic query
83
- const result = await client.query('my search query', { limit: 5 });
122
+ await client.ingest({ content: 'My content', spineType: 'NOTE', vault: 'DEV' });
123
+ const result = await client.query('my search', { limit: 5 });
84
124
  console.log(result.chronicles);
85
125
 
86
- // Cross-app share (triggers a consent popup in Mnemosyne OS)
87
- const share = await client.requestShare({
88
- fromAppId: 'other-app-id',
89
- reason: 'I need access to correlate data',
90
- });
91
-
92
126
  await client.disconnect();
93
127
  ```
94
128
 
95
129
  ---
96
130
 
97
- ## Transport Modes
131
+ ## Full API — `MnemoClientBrowser`
98
132
 
99
- The SDK supports two transport modes, auto-detected by default:
133
+ ### Connection
100
134
 
101
- | Mode | When | How |
102
- |------|------|-----|
103
- | `ws` | External Node.js app | JSON-RPC over `ws://127.0.0.1:7799` |
104
- | `ipc` | Embedded in Mnemosyne OS renderer | `window.mnemosyne` Electron IPC bridge |
105
- | `auto` | Default | Detects `window.mnemosyne` → IPC, otherwise WS |
135
+ ```typescript
136
+ const client = await MnemoClientBrowser.connect(
137
+ '127.0.0.1', // host (default)
138
+ 7799, // port (default)
139
+ 15_000, // timeout ms (default)
140
+ );
141
+
142
+ await client.register(manifest); // → RegisterResult (token stored internally)
143
+ client.close();
144
+ ```
145
+
146
+ ### Vault
106
147
 
107
148
  ```typescript
108
- // Force WebSocket (external app)
109
- const client = await MnemoClient.connect({ appId: '...', manifest: '...', transport: 'ws' });
149
+ // Ingest
150
+ await client.ingest(content, spineType, vault?, metadata?);
110
151
 
111
- // Force IPC (embedded Layer 2 app)
112
- const client = await MnemoClient.connect({ appId: '...', manifest: '...', transport: 'ipc' });
152
+ // Query
153
+ const chronicles = await client.query(text, vault?, limit?);
154
+ ```
155
+
156
+ ### Resonances (cognitive workspaces)
157
+
158
+ ```typescript
159
+ // List active resonances from the vault
160
+ const resonances = await client.resonancesList();
161
+
162
+ // Update current position (persisted as DECISION chronicle)
163
+ await client.updatePosition('resonance-id', 'Phase 52 — polish complete', 'Phase 52');
164
+ ```
165
+
166
+ ### Monorepo
167
+
168
+ ```typescript
169
+ // Git log (requires scope: 'monorepo:read', intent: 'GIT_LOG')
170
+ const commits = await client.gitLog(20, '30 days ago');
171
+
172
+ // Read a .md file from the OS repo
173
+ const content = await client.readFile('docs/ARCHITECTURE.md');
174
+ ```
175
+
176
+ ### Agents
177
+
178
+ ```typescript
179
+ // List connected Layer 2 apps (requires scope: 'agents:read', intent: 'LIST_AGENTS')
180
+ const agents = await client.agentsList();
181
+ ```
182
+
183
+ ### Events
184
+
185
+ ```typescript
186
+ // OS push events (chronicle:new, etc.)
187
+ client.onPush((event) => { /* ... */ });
188
+
189
+ // Disconnection
190
+ client.onDisconnect(() => { /* reconnect logic */ });
113
191
  ```
114
192
 
115
193
  ---
@@ -120,17 +198,18 @@ Every app declares its permissions in `app.manifest.json`.
120
198
  **The OS refuses any operation not declared in the manifest** — Zero-Trust by design.
121
199
 
122
200
  ```typescript
123
- // Available scopes
124
201
  type MnemoScope =
125
- | 'vault:read:DEV' | 'vault:write:DEV'
126
- | 'vault:read:SOCIAL' | 'vault:write:SOCIAL'
127
- | 'vault:read:PERSONAL'| 'vault:write:PERSONAL'
128
- | 'vault:read:FINANCE' | 'vault:write:FINANCE'
129
- | 'vault:read:COOK' | 'vault:write:COOK'
130
- | 'share:request' | 'share:grant'
131
- | 'nft:validate' // MnemoStore NFT licence validation
132
- | 'neural:graph:read' // NeuralGraph access
133
- | 'llm:query'; // Direct LLM queries (premium)
202
+ | 'vault:read:DEV' | 'vault:write:DEV'
203
+ | 'vault:read:SOCIAL' | 'vault:write:SOCIAL'
204
+ | 'vault:read:PERSONAL' | 'vault:write:PERSONAL'
205
+ | 'vault:read:FINANCE' | 'vault:write:FINANCE'
206
+ | 'vault:read:COOK' | 'vault:write:COOK'
207
+ | 'share:request' | 'share:grant'
208
+ | 'monorepo:read' // git log + readFile
209
+ | 'agents:read' // list connected agents
210
+ | 'nft:validate' // MnemoStore NFT licence validation
211
+ | 'neural:graph:read' // NeuralGraph access
212
+ | 'llm:query'; // Direct LLM queries (premium)
134
213
  ```
135
214
 
136
215
  ---
@@ -140,82 +219,83 @@ type MnemoScope =
140
219
  ```typescript
141
220
  import { MNEMOSYNE_METHODS } from '@mnemosyne_os/sdk';
142
221
 
143
- // All methods available on ws://127.0.0.1:7799
144
- MNEMOSYNE_METHODS.REGISTER // 'sdk.register'
145
- MNEMOSYNE_METHODS.INGEST // 'sdk.ingest'
146
- MNEMOSYNE_METHODS.QUERY // 'sdk.query'
147
- MNEMOSYNE_METHODS.CORRELATE // 'sdk.correlate'
148
- MNEMOSYNE_METHODS.FORGET // 'sdk.forget'
149
- MNEMOSYNE_METHODS.SHARE // 'sdk.share'
150
- MNEMOSYNE_METHODS.NFT_VALIDATE // 'sdk.nft.validate'
151
- MNEMOSYNE_METHODS.GRAPH_QUERY // 'sdk.graph.query'
222
+ MNEMOSYNE_METHODS.REGISTER // 'sdk.register'
223
+ MNEMOSYNE_METHODS.INGEST // 'sdk.ingest'
224
+ MNEMOSYNE_METHODS.QUERY // 'sdk.query'
225
+ MNEMOSYNE_METHODS.RESONANCES_LIST // 'sdk.resonances.list'
226
+ MNEMOSYNE_METHODS.UPDATE_POSITION // 'sdk.resonance.updatePosition'
227
+ MNEMOSYNE_METHODS.GIT_LOG // 'sdk.git.log'
228
+ MNEMOSYNE_METHODS.READ_FILE // 'sdk.readFile'
229
+ MNEMOSYNE_METHODS.LIST_AGENTS // 'sdk.agents.list'
230
+ MNEMOSYNE_METHODS.SHARE // 'sdk.share'
231
+ MNEMOSYNE_METHODS.NFT_VALIDATE // 'sdk.nft.validate'
232
+ MNEMOSYNE_METHODS.GRAPH_QUERY // 'sdk.graph.query'
233
+ MNEMOSYNE_METHODS.CORRELATE // 'sdk.correlate'
234
+ MNEMOSYNE_METHODS.FORGET // 'sdk.forget'
152
235
  ```
153
236
 
154
237
  ---
155
238
 
156
- ## Events
239
+ ## SpineTypes
157
240
 
158
241
  ```typescript
159
- // Listen for events
160
- const unsubscribe = client.on('connected', (e) => console.log('Connected!', e.data));
161
- client.on('disconnected', () => console.log('OS disconnected'));
162
- client.on('tamper-alert', (e) => console.warn('Tamper detected:', e.data));
163
- client.on('nft-revoked', (e) => console.warn('NFT licence revoked:', e.data));
164
-
165
- // Cleanup
166
- unsubscribe();
242
+ type SpineType =
243
+ | 'GIT' | 'ARCHITECTURE' | 'DECISION' | 'DEBUG' | 'FEATURE'
244
+ | 'REDDIT_POST' | 'LINKEDIN_POST' | 'SOCIAL_NODE'
245
+ | 'DOCUMENT' | 'NOTE' | 'CUSTOM'
246
+ | 'RESONANCE' // cognitive workspace node
247
+ | 'SESSION' // session context / resume snapshot
248
+ | 'POSITION_UPDATE' // current phase/position marker
249
+ | 'API' | 'DOC' | 'ERROR';
167
250
  ```
168
251
 
169
252
  ---
170
253
 
171
- ## NFT Licence (MnemoStore)
172
-
173
- Apps distributed on [MnemoStore](https://github.com/yaka0007/Mnemosyne-Neural-OS) can gate access with NFT licences:
254
+ ## Events (Push)
174
255
 
175
- ```typescript
176
- // In your app.manifest.json, declare:
177
- // "scopes": ["nft:validate"]
256
+ The OS pushes real-time events to all connected clients. Handle them with `onPush`:
178
257
 
179
- // Then validate on startup:
180
- const validation = await client.validateNFTLicense('0xYourWalletAddress');
181
- if (!validation.valid) {
182
- alert('Please purchase a licence on MnemoStore to use this app.');
183
- process.exit(1);
184
- }
185
- ```
258
+ | Event `type` | Payload | Trigger |
259
+ |---|---|---|
260
+ | `chronicle:new` | `{ vault, spineType, sourceApp, ts }` | Any client calls `ingest()` |
186
261
 
187
- > Validation is done on-chain by Mnemosyne OS (not the SDK itself).
188
- > Results are cached for 5 minutes to avoid blockchain spam.
262
+ More event types coming in future releases (agent:connected, tamper-alert, nft-revoked…).
189
263
 
190
264
  ---
191
265
 
192
- ## API Reference
193
-
194
- ### `MnemoClient.connect(options)`
195
-
196
- | Option | Type | Default | Description |
197
- |--------|------|---------|-------------|
198
- | `appId` | `string` | required | Must match `manifest.id` |
199
- | `manifest` | `string \| AppManifest` | required | Path to `app.manifest.json` or inline object |
200
- | `transport` | `'ws' \| 'ipc' \| 'auto'` | `'auto'` | Transport mode |
201
- | `wsPort` | `number` | `7799` | WebSocket port |
202
- | `timeoutMs` | `number` | `30000` | RPC timeout |
266
+ ## NFT Licence (MnemoStore)
203
267
 
204
- ### `client.ingest(payload)`
268
+ Apps distributed on MnemoStore can gate access with NFT licences:
205
269
 
206
- Ingests content into the vault. Content is vectorized by the Mnemosyne OS runtime.
270
+ ```json
271
+ // app.manifest.json
272
+ { "scopes": ["nft:validate"] }
273
+ ```
207
274
 
208
- ### `client.query(text, options?)`
275
+ ```typescript
276
+ // Via MnemoClient (Node.js)
277
+ const validation = await client.validateNFTLicense('0xYourWalletAddress');
278
+ if (!validation.valid) process.exit(1);
279
+ ```
209
280
 
210
- Semantic search over your app's chronicles. Results are isolated to your `appId`.
281
+ > Validation is done on-chain by Mnemosyne OS cached 5 min to avoid blockchain spam.
211
282
 
212
- ### `client.requestShare(request)`
283
+ ---
213
284
 
214
- Requests access to another app's chronicles. Triggers a consent popup in Mnemosyne OS.
285
+ ## Changelog
215
286
 
216
- ### `client.disconnect()`
287
+ ### v1.1.0 — 2026-04-27
288
+ - **NEW** `MnemoClientBrowser` — zero-dependency browser client (native WebSocket API)
289
+ - **NEW** `sdk.resonances.list` — fetch real Resonance objects from the vault
290
+ - **NEW** `sdk.resonance.updatePosition` — persist session position as DECISION chronicle
291
+ - **NEW** `sdk.readFile` — read `.md` files from the OS repo (monorepo:read scope)
292
+ - **NEW** Push events — `onPush()` handler for real-time OS→client notifications
293
+ - **TYPES** Added `GitCommit`, `AgentInfo`, `RESONANCE`/`SESSION`/`POSITION_UPDATE` SpineTypes
294
+ - **TYPES** Added `monorepo:read`, `agents:read` scopes; `GIT_LOG`, `LIST_AGENTS` intents
295
+ - **FIX** `Chronicle.content` is now optional (some vault records only store vectors)
217
296
 
218
- Gracefully closes the connection.
297
+ ### v1.0.0 2026-04-24
298
+ - Initial release: `MnemoClient`, `sdk.ingest`, `sdk.query`, `sdk.git.log`, `sdk.agents.list`, JWT Zero-Trust
219
299
 
220
300
  ---
221
301