@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 +176 -96
- package/dist/index.cjs +3998 -27
- package/dist/index.d.cts +267 -14
- package/dist/index.d.ts +267 -14
- package/dist/index.js +4013 -16
- package/package.json +4 -2
package/dist/index.d.ts
CHANGED
|
@@ -10,18 +10,30 @@ import { z } from 'zod';
|
|
|
10
10
|
*/
|
|
11
11
|
/** Scopes disponibles pour une app tierce */
|
|
12
12
|
type MnemoScope = 'vault:read:DEV' | 'vault:write:DEV' | 'vault:read:SOCIAL' | 'vault:write:SOCIAL' | 'vault:read:PERSONAL' | 'vault:write:PERSONAL' | 'vault:read:FINANCE' | 'vault:write:FINANCE' | 'vault:read:COOK' | 'vault:write:COOK' | 'share:request' | 'share:grant'
|
|
13
|
+
/** Accès en lecture au git log du monorepo Mnemosyne OS */
|
|
14
|
+
| 'monorepo:read'
|
|
15
|
+
/** Liste les agents SDK connectés */
|
|
16
|
+
| 'agents:read'
|
|
13
17
|
/** Validation de licence NFT on-chain pour MnemoStore */
|
|
14
18
|
| 'nft:validate'
|
|
15
19
|
/** Accès en lecture au NeuralGraph (nœuds, arêtes, clusters) */
|
|
16
20
|
| 'neural:graph:read'
|
|
17
21
|
/** Requêtes LLM directes via le runtime Mnemosyne — scope premium */
|
|
18
22
|
| 'llm:query';
|
|
19
|
-
/** Intents IPC autorisés */
|
|
20
|
-
type MnemoIntent = 'INGEST' | 'QUERY' | 'CORRELATE' | 'FORGET';
|
|
23
|
+
/** Intents IPC autorisés dans le manifest */
|
|
24
|
+
type MnemoIntent = 'INGEST' | 'QUERY' | 'CORRELATE' | 'FORGET' | 'GIT_LOG' | 'LIST_AGENTS';
|
|
21
25
|
/** Vault cible */
|
|
22
26
|
type MnemoVault = 'DEV' | 'SOCIAL' | 'PERSONAL' | 'FINANCE' | 'COOK';
|
|
23
|
-
/** Types de spine */
|
|
24
|
-
type SpineType = 'GIT' | 'ARCHITECTURE' | 'DECISION' | 'DEBUG' | 'FEATURE' | 'REDDIT_POST' | 'LINKEDIN_POST' | 'SOCIAL_NODE' | 'DOCUMENT' | 'NOTE' | 'CUSTOM'
|
|
27
|
+
/** Types de spine sémantiques */
|
|
28
|
+
type SpineType = 'GIT' | 'ARCHITECTURE' | 'DECISION' | 'DEBUG' | 'FEATURE' | 'REDDIT_POST' | 'LINKEDIN_POST' | 'SOCIAL_NODE' | 'DOCUMENT' | 'NOTE' | 'CUSTOM'
|
|
29
|
+
/** Créé par le Cockpit ou via sdk.resonances.list */
|
|
30
|
+
| 'RESONANCE'
|
|
31
|
+
/** Persistance de session / contexte de reprise */
|
|
32
|
+
| 'SESSION'
|
|
33
|
+
/** Mise à jour de position (phase, état courant) */
|
|
34
|
+
| 'POSITION_UPDATE'
|
|
35
|
+
/** Documentation API ou spec */
|
|
36
|
+
| 'API' | 'DOC' | 'ERROR';
|
|
25
37
|
/** Manifest de l'application — fichier `app.manifest.json` */
|
|
26
38
|
interface AppManifest {
|
|
27
39
|
/** Identifiant unique stable de l'app (snake_case recommandé) */
|
|
@@ -98,7 +110,8 @@ interface QueryOptions {
|
|
|
98
110
|
}
|
|
99
111
|
interface Chronicle {
|
|
100
112
|
id: string;
|
|
101
|
-
|
|
113
|
+
/** Contenu textuel du chronicle. Peut être absent si seul le vecteur est stocké. */
|
|
114
|
+
content?: string;
|
|
102
115
|
spineType: SpineType;
|
|
103
116
|
score: number;
|
|
104
117
|
timestamp: string;
|
|
@@ -127,6 +140,31 @@ interface RegisterResult {
|
|
|
127
140
|
expiresAt: number;
|
|
128
141
|
appId: string;
|
|
129
142
|
}
|
|
143
|
+
/**
|
|
144
|
+
* Un commit git retourné par MNEMOSYNE_METHODS.GIT_LOG.
|
|
145
|
+
* Le path du repo est hardcodé côté serveur (Zero-Trust).
|
|
146
|
+
*/
|
|
147
|
+
interface GitCommit {
|
|
148
|
+
hash: string;
|
|
149
|
+
fullHash?: string;
|
|
150
|
+
author: string;
|
|
151
|
+
message: string;
|
|
152
|
+
/** Type conventional commit (feat/fix/chore/…) */
|
|
153
|
+
type: string;
|
|
154
|
+
ts: number;
|
|
155
|
+
repo: string;
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Un agent SDK retourné par MNEMOSYNE_METHODS.LIST_AGENTS.
|
|
159
|
+
*/
|
|
160
|
+
interface AgentInfo {
|
|
161
|
+
id: string;
|
|
162
|
+
name: string;
|
|
163
|
+
provider: string;
|
|
164
|
+
status: 'active' | 'idle' | 'offline';
|
|
165
|
+
resonanceId?: string;
|
|
166
|
+
sessionMs?: number;
|
|
167
|
+
}
|
|
130
168
|
/**
|
|
131
169
|
* Paramètres pour valider une licence NFT.
|
|
132
170
|
* La validation se fait on-chain via le runtime Mnemosyne OS (pas directement dans le SDK).
|
|
@@ -187,7 +225,14 @@ interface MnemoEvent<T = unknown> {
|
|
|
187
225
|
* Format : base64url(header).base64url(payload).base64url(signature)
|
|
188
226
|
* Algorithme : HMAC-SHA256 (symétrique, secret partagé OS ↔ app)
|
|
189
227
|
*
|
|
190
|
-
*
|
|
228
|
+
* ## Compat Browser (MN-005)
|
|
229
|
+
* `Buffer.toString('base64url')` n'est pas supporté par le polyfill npm `buffer`.
|
|
230
|
+
* Les helpers b64url() / parseB64url() utilisent une impl universelle :
|
|
231
|
+
* - Node.js : Buffer natif (supporte base64url)
|
|
232
|
+
* - Browser : btoa/atob + remplacement des caractères non-URL
|
|
233
|
+
* Cela permet d'importer les CONSTANTES du SDK dans un renderer Electron sans crash.
|
|
234
|
+
*
|
|
235
|
+
* [SDK][SECURITY][AUTH][MN-005]
|
|
191
236
|
*/
|
|
192
237
|
interface JwtPayload {
|
|
193
238
|
sub: string;
|
|
@@ -293,12 +338,154 @@ declare class MnemoClient {
|
|
|
293
338
|
get isConnected(): boolean;
|
|
294
339
|
get appId(): string;
|
|
295
340
|
get appManifest(): AppManifest;
|
|
296
|
-
/**
|
|
341
|
+
/**
|
|
342
|
+
* Inspecte le token actuel (décodé, sans vérification cryptographique).
|
|
343
|
+
* Utilise un décodeur base64url universel (Node + Browser) — MN-005.
|
|
344
|
+
*/
|
|
297
345
|
get tokenInfo(): {
|
|
298
346
|
sub: string;
|
|
299
347
|
exp: number;
|
|
300
348
|
scopes: string[];
|
|
301
349
|
} | null;
|
|
350
|
+
/**
|
|
351
|
+
* [PHASE-50] Lit un fichier .md depuis le repo OS (docs/, packages/).
|
|
352
|
+
*/
|
|
353
|
+
readFile(path: string): Promise<string>;
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
/**
|
|
357
|
+
* @mnemosyne_os/sdk — MnemoClientBrowser
|
|
358
|
+
*
|
|
359
|
+
* Client WebSocket 100% browser-native pour les apps Layer 2 qui tournent
|
|
360
|
+
* dans un renderer Electron ou un navigateur web.
|
|
361
|
+
* N'utilise PAS le package `ws` (Node-only) — uniquement l'API WebSocket native.
|
|
362
|
+
*
|
|
363
|
+
* Usage dans une app React/Vite :
|
|
364
|
+
* ```typescript
|
|
365
|
+
* import { MnemoClientBrowser } from '@mnemosyne_os/sdk';
|
|
366
|
+
*
|
|
367
|
+
* const client = await MnemoClientBrowser.connect();
|
|
368
|
+
* await client.register({ id: 'my-app', name: 'My App', version: '1.0.0',
|
|
369
|
+
* mnemosyne_sdk: '^1.1.0', scopes: ['vault:read:DEV'], vaults: ['DEV'], intents: ['QUERY'] });
|
|
370
|
+
*
|
|
371
|
+
* const chronicles = await client.query('my search', 'DEV', 10);
|
|
372
|
+
* ```
|
|
373
|
+
*
|
|
374
|
+
* [SDK][LAYER-2][BROWSER][ZERO-TRUST]
|
|
375
|
+
*/
|
|
376
|
+
|
|
377
|
+
/**
|
|
378
|
+
* Client SDK browser-native. Communique avec le SDK WebSocket Server de
|
|
379
|
+
* Mnemosyne OS sur ws://127.0.0.1:7799 via l'API WebSocket standard.
|
|
380
|
+
*
|
|
381
|
+
* Compatible : Chrome, Firefox, Electron renderer, Safari, Vite, Next.js.
|
|
382
|
+
* Non compatible : Node.js (utiliser MnemoClient à la place).
|
|
383
|
+
*/
|
|
384
|
+
declare class MnemoClientBrowser {
|
|
385
|
+
private readonly ws;
|
|
386
|
+
private token;
|
|
387
|
+
private readonly pending;
|
|
388
|
+
private _onPush?;
|
|
389
|
+
private _onDisconnect?;
|
|
390
|
+
private readonly timeoutMs;
|
|
391
|
+
private constructor();
|
|
392
|
+
/**
|
|
393
|
+
* Crée une connexion WebSocket native vers le SDK server de Mnemosyne OS.
|
|
394
|
+
*
|
|
395
|
+
* @param host - Hostname du SDK server (défaut: '127.0.0.1')
|
|
396
|
+
* @param port - Port du SDK server (défaut: 7799)
|
|
397
|
+
* @param timeoutMs - Timeout de chaque RPC en ms (défaut: 15000)
|
|
398
|
+
*/
|
|
399
|
+
static connect(host?: string, port?: number, timeoutMs?: number): Promise<MnemoClientBrowser>;
|
|
400
|
+
private _handleMsg;
|
|
401
|
+
private call;
|
|
402
|
+
/**
|
|
403
|
+
* Enregistre l'app auprès de Mnemosyne OS et obtient un JWT 24h.
|
|
404
|
+
* Doit être appelé avant toute autre méthode.
|
|
405
|
+
*
|
|
406
|
+
* @throws si le manifest est invalide ou si l'OS refuse l'enregistrement
|
|
407
|
+
*/
|
|
408
|
+
register(manifest: AppManifest): Promise<RegisterResult>;
|
|
409
|
+
/**
|
|
410
|
+
* Ingère du contenu dans le vault Mnemosyne.
|
|
411
|
+
* Le contenu est vectorisé par le runtime OS (pas dans le SDK).
|
|
412
|
+
* Requiert le scope `vault:write:<vault>` et l'intent `INGEST`.
|
|
413
|
+
*/
|
|
414
|
+
ingest(content: string, spineType: string, vault?: string, metadata?: Record<string, unknown>): Promise<IngestResult>;
|
|
415
|
+
/**
|
|
416
|
+
* Requête sémantique sur le vault — retourne les chronicles les plus proches.
|
|
417
|
+
* Requiert le scope `vault:read:<vault>` et l'intent `QUERY`.
|
|
418
|
+
*
|
|
419
|
+
* @param text - Texte de recherche
|
|
420
|
+
* @param vault - Vault cible (défaut: 'DEV')
|
|
421
|
+
* @param limit - Nombre max de résultats (défaut: 10)
|
|
422
|
+
*/
|
|
423
|
+
query(text: string, vault?: string, limit?: number): Promise<Chronicle[]>;
|
|
424
|
+
/**
|
|
425
|
+
* Retourne les Resonances actives (projets cognitifs) depuis le vault DEV.
|
|
426
|
+
* Requiert le scope `vault:read:DEV`.
|
|
427
|
+
*/
|
|
428
|
+
resonancesList(): Promise<Record<string, unknown>[]>;
|
|
429
|
+
/**
|
|
430
|
+
* Persiste la position courante d'une Resonance dans le vault DEV.
|
|
431
|
+
* Requiert le scope `vault:write:DEV`.
|
|
432
|
+
*
|
|
433
|
+
* @param resonanceId - ID de la Resonance
|
|
434
|
+
* @param position - Description de la position courante (ex: "Phase 51.2 — auto-poll")
|
|
435
|
+
* @param phase - Phase courante (ex: "Phase 51")
|
|
436
|
+
*/
|
|
437
|
+
updatePosition(resonanceId: string, position: string, phase: string): Promise<boolean>;
|
|
438
|
+
/**
|
|
439
|
+
* Retourne les commits récents du monorepo Mnemosyne OS.
|
|
440
|
+
* Requiert le scope `monorepo:read` et l'intent `GIT_LOG`.
|
|
441
|
+
* [SECURITY] Le chemin du repo est hardcodé côté serveur.
|
|
442
|
+
*
|
|
443
|
+
* @param limit - Nombre de commits max (défaut: 20)
|
|
444
|
+
* @param since - Date relative Git (ex: '30 days ago', '2024-01-01')
|
|
445
|
+
*/
|
|
446
|
+
gitLog(limit?: number, since?: string): Promise<GitCommit[]>;
|
|
447
|
+
/**
|
|
448
|
+
* Lit un fichier `.md` depuis le repo Mnemosyne OS.
|
|
449
|
+
* Requiert le scope `monorepo:read`.
|
|
450
|
+
* [SECURITY] Seuls les fichiers `.md` sont accessibles, path sanitizé côté serveur.
|
|
451
|
+
*
|
|
452
|
+
* @param path - Chemin relatif au repo (ex: 'docs/ARCHITECTURE.md')
|
|
453
|
+
*/
|
|
454
|
+
readFile(path: string): Promise<string>;
|
|
455
|
+
/**
|
|
456
|
+
* Liste les apps Layer 2 actuellement connectées au SDK WebSocket Server.
|
|
457
|
+
* Requiert le scope `agents:read` et l'intent `LIST_AGENTS`.
|
|
458
|
+
*/
|
|
459
|
+
agentsList(): Promise<AgentInfo[]>;
|
|
460
|
+
/**
|
|
461
|
+
* Enregistre un handler pour les push events envoyés par l'OS.
|
|
462
|
+
* Déclenché par exemple quand un autre client ingère un chronicle (`chronicle:new`).
|
|
463
|
+
*
|
|
464
|
+
* @example
|
|
465
|
+
* ```typescript
|
|
466
|
+
* client.onPush((event) => {
|
|
467
|
+
* if (event.type === 'chronicle:new') {
|
|
468
|
+
* console.log('New chronicle from:', event.sourceApp);
|
|
469
|
+
* }
|
|
470
|
+
* });
|
|
471
|
+
* ```
|
|
472
|
+
*/
|
|
473
|
+
onPush(fn: (event: Record<string, unknown>) => void): void;
|
|
474
|
+
/**
|
|
475
|
+
* Enregistre un callback appelé quand la connexion WS est fermée par l'OS.
|
|
476
|
+
*/
|
|
477
|
+
onDisconnect(fn: () => void): void;
|
|
478
|
+
/**
|
|
479
|
+
* Ferme la connexion WebSocket proprement.
|
|
480
|
+
*/
|
|
481
|
+
close(): void;
|
|
482
|
+
get isConnected(): boolean;
|
|
483
|
+
/** Token JWT actuel (null avant register()) */
|
|
484
|
+
get currentToken(): string | null;
|
|
485
|
+
/**
|
|
486
|
+
* AppId extrait du JWT actuel, ou null si non enregistré.
|
|
487
|
+
*/
|
|
488
|
+
get appId(): string | null;
|
|
302
489
|
}
|
|
303
490
|
|
|
304
491
|
/**
|
|
@@ -307,28 +494,44 @@ declare class MnemoClient {
|
|
|
307
494
|
* Valide le fichier app.manifest.json avant toute connexion.
|
|
308
495
|
* Utilise Zod pour un parsing strict — aucun champ inconnu passé au serveur.
|
|
309
496
|
*
|
|
310
|
-
*
|
|
497
|
+
* ## Règle Zero-Trust (MN-004)
|
|
498
|
+
* Le GRANT utilisateur est TOUJOURS requis si l'app déclare un scope vault:*.
|
|
499
|
+
* Ce n'est PAS un flag que l'app contrôle — c'est l'OS qui décide en lisant les scopes.
|
|
500
|
+
* Un manifest avec `requires_grant: false` mais `scopes: ['vault:read:DEV']` DOIT
|
|
501
|
+
* quand même passer par le popup de consentement. L'OS appelle `requiresOsGrant(manifest)`.
|
|
502
|
+
*
|
|
503
|
+
* [SDK][ZERO-TRUST][AUDIT-TRAIL][MN-004]
|
|
311
504
|
*/
|
|
312
505
|
|
|
313
|
-
declare const VALID_SCOPES: readonly ["vault:read:DEV", "vault:write:DEV", "vault:read:SOCIAL", "vault:write:SOCIAL", "vault:read:PERSONAL", "vault:write:PERSONAL", "vault:read:FINANCE", "vault:write:FINANCE", "vault:read:COOK", "vault:write:COOK", "share:request", "share:grant"];
|
|
506
|
+
declare const VALID_SCOPES: readonly ["vault:read:DEV", "vault:write:DEV", "vault:read:SOCIAL", "vault:write:SOCIAL", "vault:read:PERSONAL", "vault:write:PERSONAL", "vault:read:FINANCE", "vault:write:FINANCE", "vault:read:COOK", "vault:write:COOK", "share:request", "share:grant", "nft:validate", "neural:graph:read", "llm:query"];
|
|
507
|
+
/**
|
|
508
|
+
* Scopes qui requièrent TOUJOURS un GRANT utilisateur côté OS.
|
|
509
|
+
* Indépendant de tout flag déclaré par l'app.
|
|
510
|
+
* [MN-004]
|
|
511
|
+
*/
|
|
512
|
+
declare const GRANT_REQUIRED_SCOPE_PREFIXES: readonly ["vault:read:", "vault:write:", "share:request", "share:grant", "llm:query"];
|
|
314
513
|
declare const AppManifestSchema: z.ZodObject<{
|
|
315
514
|
id: z.ZodString;
|
|
316
515
|
name: z.ZodString;
|
|
317
516
|
version: z.ZodString;
|
|
318
517
|
author: z.ZodOptional<z.ZodString>;
|
|
319
518
|
mnemosyne_sdk: z.ZodString;
|
|
320
|
-
scopes: z.ZodArray<z.ZodEnum<["vault:read:DEV", "vault:write:DEV", "vault:read:SOCIAL", "vault:write:SOCIAL", "vault:read:PERSONAL", "vault:write:PERSONAL", "vault:read:FINANCE", "vault:write:FINANCE", "vault:read:COOK", "vault:write:COOK", "share:request", "share:grant"]>, "many">;
|
|
519
|
+
scopes: z.ZodArray<z.ZodEnum<["vault:read:DEV", "vault:write:DEV", "vault:read:SOCIAL", "vault:write:SOCIAL", "vault:read:PERSONAL", "vault:write:PERSONAL", "vault:read:FINANCE", "vault:write:FINANCE", "vault:read:COOK", "vault:write:COOK", "share:request", "share:grant", "nft:validate", "neural:graph:read", "llm:query"]>, "many">;
|
|
321
520
|
vaults: z.ZodArray<z.ZodEnum<["DEV", "SOCIAL", "PERSONAL", "FINANCE", "COOK"]>, "many">;
|
|
322
521
|
intents: z.ZodArray<z.ZodEnum<["INGEST", "QUERY", "CORRELATE", "FORGET"]>, "many">;
|
|
323
522
|
max_chronicle_size_kb: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
523
|
+
/**
|
|
524
|
+
* @deprecated Remplacé par requiresOsGrant() — ce flag n'a aucun effet sur la sécurité.
|
|
525
|
+
* L'OS décide toujours en fonction des scopes déclarés (MN-004).
|
|
526
|
+
*/
|
|
324
527
|
requires_consent: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
325
528
|
description: z.ZodOptional<z.ZodString>;
|
|
326
|
-
}, "
|
|
529
|
+
}, "strip", z.ZodTypeAny, {
|
|
327
530
|
id: string;
|
|
328
531
|
name: string;
|
|
329
532
|
version: string;
|
|
330
533
|
mnemosyne_sdk: string;
|
|
331
|
-
scopes: ("vault:read:DEV" | "vault:write:DEV" | "vault:read:SOCIAL" | "vault:write:SOCIAL" | "vault:read:PERSONAL" | "vault:write:PERSONAL" | "vault:read:FINANCE" | "vault:write:FINANCE" | "vault:read:COOK" | "vault:write:COOK" | "share:request" | "share:grant")[];
|
|
534
|
+
scopes: ("vault:read:DEV" | "vault:write:DEV" | "vault:read:SOCIAL" | "vault:write:SOCIAL" | "vault:read:PERSONAL" | "vault:write:PERSONAL" | "vault:read:FINANCE" | "vault:write:FINANCE" | "vault:read:COOK" | "vault:write:COOK" | "share:request" | "share:grant" | "nft:validate" | "neural:graph:read" | "llm:query")[];
|
|
332
535
|
vaults: ("DEV" | "SOCIAL" | "PERSONAL" | "FINANCE" | "COOK")[];
|
|
333
536
|
intents: ("INGEST" | "QUERY" | "CORRELATE" | "FORGET")[];
|
|
334
537
|
max_chronicle_size_kb: number;
|
|
@@ -340,7 +543,7 @@ declare const AppManifestSchema: z.ZodObject<{
|
|
|
340
543
|
name: string;
|
|
341
544
|
version: string;
|
|
342
545
|
mnemosyne_sdk: string;
|
|
343
|
-
scopes: ("vault:read:DEV" | "vault:write:DEV" | "vault:read:SOCIAL" | "vault:write:SOCIAL" | "vault:read:PERSONAL" | "vault:write:PERSONAL" | "vault:read:FINANCE" | "vault:write:FINANCE" | "vault:read:COOK" | "vault:write:COOK" | "share:request" | "share:grant")[];
|
|
546
|
+
scopes: ("vault:read:DEV" | "vault:write:DEV" | "vault:read:SOCIAL" | "vault:write:SOCIAL" | "vault:read:PERSONAL" | "vault:write:PERSONAL" | "vault:read:FINANCE" | "vault:write:FINANCE" | "vault:read:COOK" | "vault:write:COOK" | "share:request" | "share:grant" | "nft:validate" | "neural:graph:read" | "llm:query")[];
|
|
344
547
|
vaults: ("DEV" | "SOCIAL" | "PERSONAL" | "FINANCE" | "COOK")[];
|
|
345
548
|
intents: ("INGEST" | "QUERY" | "CORRELATE" | "FORGET")[];
|
|
346
549
|
author?: string | undefined;
|
|
@@ -367,6 +570,27 @@ declare function assertScope(manifest: AppManifest, scope: (typeof VALID_SCOPES)
|
|
|
367
570
|
* Vérifie qu'un vault est accessible selon le manifest.
|
|
368
571
|
*/
|
|
369
572
|
declare function assertVault(manifest: AppManifest, vault: string): void;
|
|
573
|
+
/**
|
|
574
|
+
* [MN-004] Détermine si l'OS DOIT afficher un popup de consentement utilisateur
|
|
575
|
+
* AVANT d'autoriser cette app à s'exécuter.
|
|
576
|
+
*
|
|
577
|
+
* La décision est basée UNIQUEMENT sur les scopes déclarés dans le manifest.
|
|
578
|
+
* Elle est imperméable à tout flag (`requires_grant`, `requires_consent`) que
|
|
579
|
+
* l'app pourrait contrôler elle-même.
|
|
580
|
+
*
|
|
581
|
+
* Règle : tout scope avec préfixe `vault:*`, `share:*` ou `llm:query` → GRANT requis.
|
|
582
|
+
*
|
|
583
|
+
* @example
|
|
584
|
+
* ```typescript
|
|
585
|
+
* import { requiresOsGrant } from '@mnemosyne_os/sdk';
|
|
586
|
+
* // Dans LAUNCH_LAYER2_APP (main process) :
|
|
587
|
+
* if (requiresOsGrant(appManifest)) {
|
|
588
|
+
* const granted = await showPermissionPrompt(appManifest);
|
|
589
|
+
* if (!granted) return { success: false, error: 'GRANT_DENIED' };
|
|
590
|
+
* }
|
|
591
|
+
* ```
|
|
592
|
+
*/
|
|
593
|
+
declare function requiresOsGrant(manifest: Pick<AppManifest, 'scopes'>): boolean;
|
|
370
594
|
|
|
371
595
|
/**
|
|
372
596
|
* @mnemosyne_os/sdk — Public Constants
|
|
@@ -398,6 +622,35 @@ declare const MNEMOSYNE_METHODS: {
|
|
|
398
622
|
readonly CORRELATE: "sdk.correlate";
|
|
399
623
|
/** Supprime un chronicle par ID (scope vault:write requis) */
|
|
400
624
|
readonly FORGET: "sdk.forget";
|
|
625
|
+
/**
|
|
626
|
+
* Liste les Resonances actives (projets cognitifs) depuis le vault DEV.
|
|
627
|
+
* Requiert le scope `vault:read:DEV`.
|
|
628
|
+
*/
|
|
629
|
+
readonly RESONANCES_LIST: "sdk.resonances.list";
|
|
630
|
+
/**
|
|
631
|
+
* Met à jour la position courante d'une Resonance (phase, description).
|
|
632
|
+
* Persisté comme chronicle DECISION dans le vault DEV.
|
|
633
|
+
* Requiert le scope `vault:write:DEV`.
|
|
634
|
+
*/
|
|
635
|
+
readonly UPDATE_POSITION: "sdk.resonance.updatePosition";
|
|
636
|
+
/**
|
|
637
|
+
* Lit le git log du monorepo Mnemosyne OS.
|
|
638
|
+
* Requiert le scope `monorepo:read` dans le manifest.
|
|
639
|
+
* Retourne les commits filtrés (hash, message, author, date).
|
|
640
|
+
* [SECURITY] Path hardcodé côté serveur — le client ne contrôle pas le repo.
|
|
641
|
+
*/
|
|
642
|
+
readonly GIT_LOG: "sdk.git.log";
|
|
643
|
+
/**
|
|
644
|
+
* Lit un fichier .md depuis le repo Mnemosyne OS (docs/, packages/).
|
|
645
|
+
* Requiert le scope `monorepo:read`.
|
|
646
|
+
* [SECURITY] Seuls les .md sont lisibles, path sanitizé côté serveur.
|
|
647
|
+
*/
|
|
648
|
+
readonly READ_FILE: "sdk.readFile";
|
|
649
|
+
/**
|
|
650
|
+
* Liste les agents actifs connectés au SDK WebSocket Server.
|
|
651
|
+
* Requiert le scope `agents:read` dans le manifest.
|
|
652
|
+
*/
|
|
653
|
+
readonly LIST_AGENTS: "sdk.agents.list";
|
|
401
654
|
/** Demande d'accès aux chronicles d'une autre app (popup consentement) */
|
|
402
655
|
readonly SHARE: "sdk.share";
|
|
403
656
|
/**
|
|
@@ -440,4 +693,4 @@ declare const MNEMOSYNE_CHAINS: {
|
|
|
440
693
|
};
|
|
441
694
|
type MnemoChain = keyof typeof MNEMOSYNE_CHAINS;
|
|
442
695
|
|
|
443
|
-
export { type AppManifest, AppManifestSchema, type Chronicle, type GraphEdge, type GraphNode, type GraphQueryResult, type IngestPayload, type IngestResult, type JwtPayload, type JwtVerifyResult, MNEMOSYNE_CHAINS, MNEMOSYNE_METHODS, MNEMOSYNE_NFT_CACHE_TTL_MS, MNEMOSYNE_TOKEN_TTL_S, MNEMOSYNE_WS_HOST, MNEMOSYNE_WS_PORT, type MnemoChain, MnemoClient, type MnemoClientOptions, type MnemoEvent, type MnemoEventType, type MnemoIntent, type MnemoMethod, type MnemoScope, type MnemoVault, type NFTLicenseParams, type NFTValidation, type QueryOptions, type QueryResult, type RegisterResult, type ShareRequest, type ShareResult, type SpineType, assertScope, assertVault, generateAppToken, generateSecret, loadManifest, parseManifest, verifyToken };
|
|
696
|
+
export { type AgentInfo, type AppManifest, AppManifestSchema, type Chronicle, GRANT_REQUIRED_SCOPE_PREFIXES, type GitCommit, type GraphEdge, type GraphNode, type GraphQueryResult, type IngestPayload, type IngestResult, type JwtPayload, type JwtVerifyResult, MNEMOSYNE_CHAINS, MNEMOSYNE_METHODS, MNEMOSYNE_NFT_CACHE_TTL_MS, MNEMOSYNE_TOKEN_TTL_S, MNEMOSYNE_WS_HOST, MNEMOSYNE_WS_PORT, type MnemoChain, MnemoClient, MnemoClientBrowser, type MnemoClientOptions, type MnemoEvent, type MnemoEventType, type MnemoIntent, type MnemoMethod, type MnemoScope, type MnemoVault, type NFTLicenseParams, type NFTValidation, type QueryOptions, type QueryResult, type RegisterResult, type ShareRequest, type ShareResult, type SpineType, assertScope, assertVault, generateAppToken, generateSecret, loadManifest, parseManifest, requiresOsGrant, verifyToken };
|