@soulcraft/sdk 1.4.10 → 1.4.12
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/dist/server/create-sdk.d.ts.map +1 -1
- package/dist/server/create-sdk.js +3 -7
- package/dist/server/create-sdk.js.map +1 -1
- package/dist/server/index.d.ts +0 -1
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +0 -1
- package/dist/server/index.js.map +1 -1
- package/dist/server/instance-pool.d.ts +36 -45
- package/dist/server/instance-pool.d.ts.map +1 -1
- package/dist/server/instance-pool.js +51 -61
- package/dist/server/instance-pool.js.map +1 -1
- package/dist/types.d.ts +2 -5
- package/dist/types.d.ts.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.d.ts.map +1 -1
- package/dist/version.js +1 -1
- package/dist/version.js.map +1 -1
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-sdk.d.ts","sourceRoot":"","sources":["../../src/server/create-sdk.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAW/C,OAAO,KAAK,EAAE,YAAY,EAAyC,MAAM,aAAa,CAAA;AAOtF;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;;;;;OAMG;IACH,KAAK,EAAE,MAAM,CAAA;CACd;AAMD;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,gBAAgB,GAAG,YAAY,
|
|
1
|
+
{"version":3,"file":"create-sdk.d.ts","sourceRoot":"","sources":["../../src/server/create-sdk.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAW/C,OAAO,KAAK,EAAE,YAAY,EAAyC,MAAM,aAAa,CAAA;AAOtF;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;;;;;OAMG;IACH,KAAK,EAAE,MAAM,CAAA;CACd;AAMD;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,gBAAgB,GAAG,YAAY,CAgDjE"}
|
|
@@ -105,13 +105,9 @@ export function createSDK(options) {
|
|
|
105
105
|
billing.stopFlush();
|
|
106
106
|
await billing.flush();
|
|
107
107
|
license.stopHeartbeat();
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
// Local transport — the caller owns the brain, so we flush directly.
|
|
112
|
-
// The scopeKey is informational only; the brain is already resolved.
|
|
113
|
-
void scopeKey;
|
|
114
|
-
await brain.flush();
|
|
108
|
+
// brain.close() flushes all deferred writes (HNSW dirty nodes, indexes,
|
|
109
|
+
// storage counts) and frees all resources — the correct full-shutdown path.
|
|
110
|
+
await brain.close();
|
|
115
111
|
},
|
|
116
112
|
};
|
|
117
113
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-sdk.js","sourceRoot":"","sources":["../../src/server/create-sdk.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAGH,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAA;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAA;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAA;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAA;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAA;AACjE,OAAO,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAA;AAC7E,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAA;AAsBxF,gFAAgF;AAChF,UAAU;AACV,gFAAgF;AAEhF;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,MAAM,UAAU,SAAS,CAAC,OAAyB;IACjD,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,CAAA;IAEzB,MAAM,SAAS,GAAG,IAAI,cAAc,CAAC,KAAK,CAAC,CAAA;IAC3C,MAAM,WAAW,GAAG,iBAAiB,CAAC,SAAS,CAAoB,CAAA;IAEnE,wEAAwE;IACxE,2EAA2E;IAC3E,8DAA8D;IAC9D,MAAM,GAAG,GAAI,WAAmB,CAAC,GAAgB,CAAA;IACjD,8DAA8D;IAC9D,MAAM,QAAQ,GAAI,WAAmB,CAAC,QAA0B,CAAA;IAEhE,MAAM,MAAM,GAAG,kBAAkB,EAAE,CAAA;IACnC,MAAM,EAAE,GAAG,cAAc,EAAE,CAAA;IAC3B,MAAM,MAAM,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAA;IACxC,MAAM,OAAO,GAAG,mBAAmB,EAAE,CAAA;IACrC,MAAM,OAAO,GAAG,mBAAmB,CAAC,EAAE,OAAO,EAAE,CAAC,CAAA;IAChD,MAAM,IAAI,GAAG,gBAAgB,EAAE,CAAA;IAC/B,MAAM,aAAa,GAAG,yBAAyB,EAAE,CAAA;IAEjD,MAAM,IAAI,GAAe;QACvB,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,qBAAqB,CAAC,KAAK,EAAE,MAAM,CAAC;QACpE,WAAW,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,qBAAqB,CAAC,IAAI,CAAC;KACnD,CAAA;IAED,OAAO;QACL,MAAM,EAAE,WAAW;QACnB,GAAG;QACH,QAAQ;QACR,IAAI;QACJ,MAAM;QACN,EAAE;QACF,MAAM;QACN,OAAO;QACP,IAAI;QACJ,OAAO;QACP,aAAa;QAEb,KAAK,CAAC,QAAQ;YACZ,OAAO,CAAC,SAAS,EAAE,CAAA;YACnB,MAAM,OAAO,CAAC,KAAK,EAAE,CAAA;YACrB,OAAO,CAAC,aAAa,EAAE,CAAA;YACvB,
|
|
1
|
+
{"version":3,"file":"create-sdk.js","sourceRoot":"","sources":["../../src/server/create-sdk.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAGH,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAA;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAA;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAA;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAA;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAA;AACjE,OAAO,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAA;AAC7E,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAA;AAsBxF,gFAAgF;AAChF,UAAU;AACV,gFAAgF;AAEhF;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,MAAM,UAAU,SAAS,CAAC,OAAyB;IACjD,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,CAAA;IAEzB,MAAM,SAAS,GAAG,IAAI,cAAc,CAAC,KAAK,CAAC,CAAA;IAC3C,MAAM,WAAW,GAAG,iBAAiB,CAAC,SAAS,CAAoB,CAAA;IAEnE,wEAAwE;IACxE,2EAA2E;IAC3E,8DAA8D;IAC9D,MAAM,GAAG,GAAI,WAAmB,CAAC,GAAgB,CAAA;IACjD,8DAA8D;IAC9D,MAAM,QAAQ,GAAI,WAAmB,CAAC,QAA0B,CAAA;IAEhE,MAAM,MAAM,GAAG,kBAAkB,EAAE,CAAA;IACnC,MAAM,EAAE,GAAG,cAAc,EAAE,CAAA;IAC3B,MAAM,MAAM,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAA;IACxC,MAAM,OAAO,GAAG,mBAAmB,EAAE,CAAA;IACrC,MAAM,OAAO,GAAG,mBAAmB,CAAC,EAAE,OAAO,EAAE,CAAC,CAAA;IAChD,MAAM,IAAI,GAAG,gBAAgB,EAAE,CAAA;IAC/B,MAAM,aAAa,GAAG,yBAAyB,EAAE,CAAA;IAEjD,MAAM,IAAI,GAAe;QACvB,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,qBAAqB,CAAC,KAAK,EAAE,MAAM,CAAC;QACpE,WAAW,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,qBAAqB,CAAC,IAAI,CAAC;KACnD,CAAA;IAED,OAAO;QACL,MAAM,EAAE,WAAW;QACnB,GAAG;QACH,QAAQ;QACR,IAAI;QACJ,MAAM;QACN,EAAE;QACF,MAAM;QACN,OAAO;QACP,IAAI;QACJ,OAAO;QACP,aAAa;QAEb,KAAK,CAAC,QAAQ;YACZ,OAAO,CAAC,SAAS,EAAE,CAAA;YACnB,MAAM,OAAO,CAAC,KAAK,EAAE,CAAA;YACrB,OAAO,CAAC,aAAa,EAAE,CAAA;YACvB,wEAAwE;YACxE,4EAA4E;YAC5E,MAAM,KAAK,CAAC,KAAK,EAAE,CAAA;QACrB,CAAC;KACF,CAAA;AACH,CAAC"}
|
package/dist/server/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAGH,OAAO,EACL,kBAAkB,EAClB,uBAAuB,EACvB,gBAAgB,GACjB,MAAM,oBAAoB,CAAA;AAC3B,YAAY,EACV,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,oBAAoB,CAAA;AAG3B,OAAO,EACL,mBAAmB,EACnB,qBAAqB,GACtB,MAAM,eAAe,CAAA;AACtB,YAAY,EACV,mBAAmB,EACnB,qBAAqB,EACrB,eAAe,EACf,SAAS,GACV,MAAM,eAAe,CAAA;AAGtB,OAAO,EAAE,8BAA8B,EAAE,MAAM,0BAA0B,CAAA;AACzE,YAAY,EACV,8BAA8B,EAC9B,wBAAwB,GACzB,MAAM,0BAA0B,CAAA;AAGjC,OAAO,EACL,gBAAgB,EAChB,uBAAuB,EACvB,UAAU,GACX,MAAM,oBAAoB,CAAA;AAC3B,YAAY,EACV,qBAAqB,EACrB,UAAU,EACV,qBAAqB,EACrB,eAAe,GAChB,MAAM,oBAAoB,CAAA;AAC3B,YAAY,EACV,QAAQ,EACR,cAAc,EACd,WAAW,EACX,YAAY,EACZ,iBAAiB,EACjB,eAAe,EACf,mBAAmB,EACnB,qBAAqB,EACrB,mBAAmB,EACnB,eAAe,EACf,aAAa,GACd,MAAM,0BAA0B,CAAA;AAGjC,OAAO,EACL,oBAAoB,EACpB,2BAA2B,EAC3B,wBAAwB,EACxB,aAAa,GACd,MAAM,+BAA+B,CAAA;AACtC,YAAY,EACV,qBAAqB,EACrB,cAAc,EACd,WAAW,EACX,cAAc,EACd,4BAA4B,EAC5B,yBAAyB,GAC1B,MAAM,+BAA+B,CAAA;AACtC,OAAO,EAAE,8BAA8B,EAAE,MAAM,gCAAgC,CAAA;AAC/E,YAAY,EACV,uBAAuB,EACvB,mBAAmB,GACpB,MAAM,gCAAgC,CAAA;AAGvC,OAAO,EACL,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,kCAAkC,CAAA;AAGzC,OAAO,EACL,qBAAqB,EACrB,wBAAwB,EACxB,WAAW,EACX,mBAAmB,GACpB,MAAM,2BAA2B,CAAA;AAGlC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,YAAY,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AAGvD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AACnD,YAAY,EACV,SAAS,EACT,kBAAkB,EAClB,mBAAmB,EACnB,qBAAqB,GACtB,MAAM,mBAAmB,CAAA;AAG1B,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAA;AACjE,YAAY,EAAE,0BAA0B,EAAE,MAAM,6BAA6B,CAAA;AAC7E,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAA;AACjE,YAAY,EAAE,0BAA0B,EAAE,MAAM,6BAA6B,CAAA;AAC7E,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAC3D,OAAO,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAA;AAG7E,YAAY,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AACnD,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAA;AACxF,YAAY,EAAE,4BAA4B,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAA;AACpG,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA"}
|
package/dist/server/index.js
CHANGED
package/dist/server/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAEH,iFAAiF;AACjF,OAAO,EACL,kBAAkB,EAClB,uBAAuB,EACvB,gBAAgB,GACjB,MAAM,oBAAoB,CAAA;AAM3B,iFAAiF;AACjF,OAAO,EACL,mBAAmB,EACnB,qBAAqB,GACtB,MAAM,eAAe,CAAA;AAQtB,iFAAiF;AACjF,OAAO,EAAE,8BAA8B,EAAE,MAAM,0BAA0B,CAAA;AAMzE,gFAAgF;AAChF,OAAO,EACL,gBAAgB,EAChB,uBAAuB,EACvB,UAAU,GACX,MAAM,oBAAoB,CAAA;AAqB3B,iFAAiF;AACjF,OAAO,EACL,oBAAoB,EACpB,2BAA2B,EAC3B,wBAAwB,EACxB,aAAa,GACd,MAAM,+BAA+B,CAAA;AAStC,OAAO,EAAE,8BAA8B,EAAE,MAAM,gCAAgC,CAAA;AAM/E,iFAAiF;AACjF,OAAO,EACL,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,kCAAkC,CAAA;AAEzC,mFAAmF;AACnF,OAAO,EACL,qBAAqB,EACrB,wBAAwB,EACxB,WAAW,EACX,mBAAmB,GACpB,MAAM,2BAA2B,CAAA;AAElC,iFAAiF;AACjF,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAG3C,iFAAiF;AACjF,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAQnD,qFAAqF;AACrF,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAA;AAEjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAA;AAEjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAC3D,OAAO,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAA;AAI7E,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAA;AAExF,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA"}
|
|
@@ -16,10 +16,10 @@
|
|
|
16
16
|
* ## LRU eviction
|
|
17
17
|
*
|
|
18
18
|
* The pool is backed by `lru-cache`. When an entry is evicted (because the cache is
|
|
19
|
-
* full), the `dispose` callback fires synchronously.
|
|
20
|
-
*
|
|
21
|
-
* Call `
|
|
22
|
-
* persisted.
|
|
19
|
+
* full), the `dispose` callback fires synchronously. A non-blocking `brain.close()` call
|
|
20
|
+
* is queued — `close()` flushes any deferred HNSW dirty nodes and frees all memory.
|
|
21
|
+
* Call `closeAll()` or `shutdown()` before process exit to guarantee all writes are
|
|
22
|
+
* persisted and all resources freed.
|
|
23
23
|
*
|
|
24
24
|
* ## Concurrency
|
|
25
25
|
*
|
|
@@ -27,6 +27,19 @@
|
|
|
27
27
|
* Only one Brainy instance is ever created per key, regardless of how many requests
|
|
28
28
|
* arrive simultaneously during cold start.
|
|
29
29
|
*
|
|
30
|
+
* ## Clearing workspace data
|
|
31
|
+
*
|
|
32
|
+
* To wipe all data from a workspace and leave it ready for new use, call
|
|
33
|
+
* `brain.clear()` directly on the instance. Brainy handles all storage cleanup,
|
|
34
|
+
* index teardown, and reinitialization internally — the instance remains in the pool
|
|
35
|
+
* and is immediately usable afterwards. No pool interaction is required.
|
|
36
|
+
*
|
|
37
|
+
* ```typescript
|
|
38
|
+
* const brain = await pool.forUser(emailHash, workspaceId)
|
|
39
|
+
* await brain.clear()
|
|
40
|
+
* // brain is now empty and ready — no evict, no re-init needed
|
|
41
|
+
* ```
|
|
42
|
+
*
|
|
30
43
|
* @example
|
|
31
44
|
* ```typescript
|
|
32
45
|
* import { BrainyInstancePool } from '@soulcraft/sdk/server'
|
|
@@ -36,7 +49,6 @@
|
|
|
36
49
|
* dataPath: '/mnt/brainy-data',
|
|
37
50
|
* strategy: 'per-user',
|
|
38
51
|
* maxInstances: 200,
|
|
39
|
-
* flushOnEvict: true,
|
|
40
52
|
* })
|
|
41
53
|
*
|
|
42
54
|
* // In a request handler:
|
|
@@ -83,15 +95,6 @@ export interface InstancePoolConfig {
|
|
|
83
95
|
* Defaults to `200` for per-user, `50` for per-tenant strategies.
|
|
84
96
|
*/
|
|
85
97
|
maxInstances?: number;
|
|
86
|
-
/**
|
|
87
|
-
* Whether to call `brain.flush()` when an instance is evicted from the LRU.
|
|
88
|
-
*
|
|
89
|
-
* The flush is non-blocking from the pool's perspective — eviction completes
|
|
90
|
-
* immediately and the flush continues in the background.
|
|
91
|
-
*
|
|
92
|
-
* @default true
|
|
93
|
-
*/
|
|
94
|
-
flushOnEvict?: boolean;
|
|
95
98
|
/**
|
|
96
99
|
* Optional async hook called after a new Brainy instance is initialized.
|
|
97
100
|
*
|
|
@@ -129,9 +132,9 @@ export interface InstancePoolStats {
|
|
|
129
132
|
/**
|
|
130
133
|
* LRU pool of live Brainy instances for server-mode SDK.
|
|
131
134
|
*
|
|
132
|
-
* Manages creation, caching, eviction,
|
|
133
|
-
*
|
|
134
|
-
*
|
|
135
|
+
* Manages creation, caching, eviction, and graceful shutdown of Brainy instances.
|
|
136
|
+
* Supports per-user (Workshop), per-tenant (Venue), and per-scope (Academy / custom)
|
|
137
|
+
* pooling strategies.
|
|
135
138
|
*
|
|
136
139
|
* @example Workshop (per-user)
|
|
137
140
|
* ```typescript
|
|
@@ -140,7 +143,6 @@ export interface InstancePoolStats {
|
|
|
140
143
|
* dataPath: '/mnt/brainy-data',
|
|
141
144
|
* strategy: 'per-user',
|
|
142
145
|
* maxInstances: 200,
|
|
143
|
-
* flushOnEvict: true,
|
|
144
146
|
* })
|
|
145
147
|
*
|
|
146
148
|
* const brain = await pool.forUser(emailHash, workspaceId)
|
|
@@ -153,7 +155,6 @@ export interface InstancePoolStats {
|
|
|
153
155
|
* dataPath: '/mnt/brainy-data',
|
|
154
156
|
* strategy: 'per-tenant',
|
|
155
157
|
* maxInstances: 50,
|
|
156
|
-
* flushOnEvict: true,
|
|
157
158
|
* })
|
|
158
159
|
*
|
|
159
160
|
* const brain = await pool.forTenant('wicks-and-whiskers')
|
|
@@ -204,43 +205,33 @@ export declare class BrainyInstancePool {
|
|
|
204
205
|
*/
|
|
205
206
|
forScope(key: string, factory: () => Promise<Brainy>): Promise<Brainy>;
|
|
206
207
|
/**
|
|
207
|
-
*
|
|
208
|
-
*
|
|
209
|
-
* Calls `brain.flush()` to persist any buffered writes, then evicts the entry.
|
|
210
|
-
* Use {@link evict} instead when the instance has already been fully cleared
|
|
211
|
-
* (e.g. after `brain.clear()`), because `brain.flush()` requires live internal
|
|
212
|
-
* state (graphIndex, metadataIndex) that `brain.clear()` may have torn down.
|
|
213
|
-
*
|
|
214
|
-
* @param key - The scope key (as stored in the pool).
|
|
215
|
-
*/
|
|
216
|
-
flush(key: string): Promise<void>;
|
|
217
|
-
/**
|
|
218
|
-
* Evicts a specific instance from the pool without flushing.
|
|
208
|
+
* Closes and removes a specific instance from the pool.
|
|
219
209
|
*
|
|
220
|
-
*
|
|
221
|
-
*
|
|
222
|
-
*
|
|
223
|
-
*
|
|
210
|
+
* Calls `brain.close()` which flushes any deferred HNSW dirty nodes and frees
|
|
211
|
+
* all memory and resources, then removes the entry from the cache. Use this when
|
|
212
|
+
* you want to permanently evict an instance — the next access will create a fresh
|
|
213
|
+
* one via `forUser()` / `forTenant()` / `forScope()`.
|
|
224
214
|
*
|
|
225
|
-
*
|
|
226
|
-
* `
|
|
215
|
+
* **To wipe all workspace data** without evicting the instance, call
|
|
216
|
+
* `brain.clear()` directly instead. The instance remains in the pool and is
|
|
217
|
+
* immediately usable after `clear()` completes.
|
|
227
218
|
*
|
|
228
219
|
* @param key - The scope key (as stored in the pool).
|
|
229
|
-
* @returns `true` if an entry was removed, `false` if the key was not cached.
|
|
230
220
|
*/
|
|
231
|
-
|
|
221
|
+
remove(key: string): Promise<void>;
|
|
232
222
|
/**
|
|
233
|
-
*
|
|
223
|
+
* Closes all cached instances and clears the pool.
|
|
234
224
|
*
|
|
235
|
-
* Calls `brain.
|
|
236
|
-
*
|
|
225
|
+
* Calls `brain.close()` on every live instance concurrently, which flushes
|
|
226
|
+
* deferred HNSW dirty nodes and frees all resources. The instances remain
|
|
227
|
+
* removed from the cache after this call.
|
|
237
228
|
*/
|
|
238
|
-
|
|
229
|
+
closeAll(): Promise<void>;
|
|
239
230
|
/**
|
|
240
231
|
* Gracefully shuts down the pool.
|
|
241
232
|
*
|
|
242
|
-
*
|
|
243
|
-
*
|
|
233
|
+
* Closes all instances (flushing deferred writes and freeing resources), then
|
|
234
|
+
* clears the pending-init map. After `shutdown()` the pool is empty.
|
|
244
235
|
*/
|
|
245
236
|
shutdown(): Promise<void>;
|
|
246
237
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instance-pool.d.ts","sourceRoot":"","sources":["../../src/server/instance-pool.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"instance-pool.d.ts","sourceRoot":"","sources":["../../src/server/instance-pool.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyDG;AAMH,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAC1C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAMnD;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC;;;;;;OAMG;IACH,OAAO,EAAE,YAAY,GAAG,iBAAiB,CAAA;IAEzC;;;OAGG;IACH,QAAQ,EAAE,MAAM,CAAA;IAEhB,iCAAiC;IACjC,QAAQ,EAAE,gBAAgB,CAAA;IAE1B;;;;;;;;;OASG;IACH,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,KAAK,MAAM,CAAA;IAE1D;;;;;OAKG;IACH,YAAY,CAAC,EAAE,MAAM,CAAA;IAErB;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;CAC/D;AAMD;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,kDAAkD;IAClD,IAAI,EAAE,MAAM,CAAA;IACZ,uDAAuD;IACvD,OAAO,EAAE,MAAM,CAAA;IACf,oDAAoD;IACpD,IAAI,EAAE,MAAM,EAAE,CAAA;CACf;AAMD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA8B;IACrD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA0B;IAChD,oEAAoE;IACpE,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAqC;IAE7D;;OAEG;gBACS,MAAM,EAAE,kBAAkB;IA0BtC;;;;;;;;;;OAUG;IACG,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IASnE;;;;;;;;OAQG;IACG,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IASpD;;;;;;;;;;;OAWG;IACG,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IAyB5E;;;;;;;;;;;;;OAaG;IACG,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQxC;;;;;;OAMG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAa/B;;;;;OAKG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAK/B;;OAEG;IACH,QAAQ,IAAI,iBAAiB;IAU7B;;;;;;;;;OASG;IACH,OAAO,CAAC,YAAY;IAqBpB;;;;;;;;;OASG;YACW,WAAW;CA0B1B;AAMD;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,uBAAwB,SAAQ,KAAK;IAChD,0EAA0E;IAC1E,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAE3B;;;OAGG;gBACS,OAAO,EAAE,MAAM,EAAE,UAAU,SAAI;CAK5C;AAMD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEtD"}
|
|
@@ -16,10 +16,10 @@
|
|
|
16
16
|
* ## LRU eviction
|
|
17
17
|
*
|
|
18
18
|
* The pool is backed by `lru-cache`. When an entry is evicted (because the cache is
|
|
19
|
-
* full), the `dispose` callback fires synchronously.
|
|
20
|
-
*
|
|
21
|
-
* Call `
|
|
22
|
-
* persisted.
|
|
19
|
+
* full), the `dispose` callback fires synchronously. A non-blocking `brain.close()` call
|
|
20
|
+
* is queued — `close()` flushes any deferred HNSW dirty nodes and frees all memory.
|
|
21
|
+
* Call `closeAll()` or `shutdown()` before process exit to guarantee all writes are
|
|
22
|
+
* persisted and all resources freed.
|
|
23
23
|
*
|
|
24
24
|
* ## Concurrency
|
|
25
25
|
*
|
|
@@ -27,6 +27,19 @@
|
|
|
27
27
|
* Only one Brainy instance is ever created per key, regardless of how many requests
|
|
28
28
|
* arrive simultaneously during cold start.
|
|
29
29
|
*
|
|
30
|
+
* ## Clearing workspace data
|
|
31
|
+
*
|
|
32
|
+
* To wipe all data from a workspace and leave it ready for new use, call
|
|
33
|
+
* `brain.clear()` directly on the instance. Brainy handles all storage cleanup,
|
|
34
|
+
* index teardown, and reinitialization internally — the instance remains in the pool
|
|
35
|
+
* and is immediately usable afterwards. No pool interaction is required.
|
|
36
|
+
*
|
|
37
|
+
* ```typescript
|
|
38
|
+
* const brain = await pool.forUser(emailHash, workspaceId)
|
|
39
|
+
* await brain.clear()
|
|
40
|
+
* // brain is now empty and ready — no evict, no re-init needed
|
|
41
|
+
* ```
|
|
42
|
+
*
|
|
30
43
|
* @example
|
|
31
44
|
* ```typescript
|
|
32
45
|
* import { BrainyInstancePool } from '@soulcraft/sdk/server'
|
|
@@ -36,7 +49,6 @@
|
|
|
36
49
|
* dataPath: '/mnt/brainy-data',
|
|
37
50
|
* strategy: 'per-user',
|
|
38
51
|
* maxInstances: 200,
|
|
39
|
-
* flushOnEvict: true,
|
|
40
52
|
* })
|
|
41
53
|
*
|
|
42
54
|
* // In a request handler:
|
|
@@ -55,9 +67,9 @@ import { Brainy } from '@soulcraft/brainy';
|
|
|
55
67
|
/**
|
|
56
68
|
* LRU pool of live Brainy instances for server-mode SDK.
|
|
57
69
|
*
|
|
58
|
-
* Manages creation, caching, eviction,
|
|
59
|
-
*
|
|
60
|
-
*
|
|
70
|
+
* Manages creation, caching, eviction, and graceful shutdown of Brainy instances.
|
|
71
|
+
* Supports per-user (Workshop), per-tenant (Venue), and per-scope (Academy / custom)
|
|
72
|
+
* pooling strategies.
|
|
61
73
|
*
|
|
62
74
|
* @example Workshop (per-user)
|
|
63
75
|
* ```typescript
|
|
@@ -66,7 +78,6 @@ import { Brainy } from '@soulcraft/brainy';
|
|
|
66
78
|
* dataPath: '/mnt/brainy-data',
|
|
67
79
|
* strategy: 'per-user',
|
|
68
80
|
* maxInstances: 200,
|
|
69
|
-
* flushOnEvict: true,
|
|
70
81
|
* })
|
|
71
82
|
*
|
|
72
83
|
* const brain = await pool.forUser(emailHash, workspaceId)
|
|
@@ -79,7 +90,6 @@ import { Brainy } from '@soulcraft/brainy';
|
|
|
79
90
|
* dataPath: '/mnt/brainy-data',
|
|
80
91
|
* strategy: 'per-tenant',
|
|
81
92
|
* maxInstances: 50,
|
|
82
|
-
* flushOnEvict: true,
|
|
83
93
|
* })
|
|
84
94
|
*
|
|
85
95
|
* const brain = await pool.forTenant('wicks-and-whiskers')
|
|
@@ -101,18 +111,16 @@ export class BrainyInstancePool {
|
|
|
101
111
|
strategy: config.strategy,
|
|
102
112
|
scopeKey: config.scopeKey ?? ((userId, workspaceId) => `${userId}:${workspaceId}`),
|
|
103
113
|
maxInstances: config.maxInstances ?? defaultMax,
|
|
104
|
-
flushOnEvict: config.flushOnEvict ?? true,
|
|
105
114
|
onInit: config.onInit ?? (async () => { }),
|
|
106
115
|
};
|
|
107
116
|
this.cache = new LRUCache({
|
|
108
117
|
max: this.config.maxInstances,
|
|
109
118
|
dispose: (brain, _key, _reason) => {
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
}
|
|
119
|
+
// Non-blocking close — eviction is synchronous, close() runs in background.
|
|
120
|
+
// brain.close() flushes deferred HNSW dirty nodes then frees all resources.
|
|
121
|
+
brain.close().catch((err) => {
|
|
122
|
+
console.error('[SDK/pool] close-on-evict failed:', err);
|
|
123
|
+
});
|
|
116
124
|
},
|
|
117
125
|
});
|
|
118
126
|
}
|
|
@@ -187,70 +195,52 @@ export class BrainyInstancePool {
|
|
|
187
195
|
return initPromise;
|
|
188
196
|
}
|
|
189
197
|
/**
|
|
190
|
-
*
|
|
198
|
+
* Closes and removes a specific instance from the pool.
|
|
199
|
+
*
|
|
200
|
+
* Calls `brain.close()` which flushes any deferred HNSW dirty nodes and frees
|
|
201
|
+
* all memory and resources, then removes the entry from the cache. Use this when
|
|
202
|
+
* you want to permanently evict an instance — the next access will create a fresh
|
|
203
|
+
* one via `forUser()` / `forTenant()` / `forScope()`.
|
|
191
204
|
*
|
|
192
|
-
*
|
|
193
|
-
*
|
|
194
|
-
*
|
|
195
|
-
* state (graphIndex, metadataIndex) that `brain.clear()` may have torn down.
|
|
205
|
+
* **To wipe all workspace data** without evicting the instance, call
|
|
206
|
+
* `brain.clear()` directly instead. The instance remains in the pool and is
|
|
207
|
+
* immediately usable after `clear()` completes.
|
|
196
208
|
*
|
|
197
209
|
* @param key - The scope key (as stored in the pool).
|
|
198
210
|
*/
|
|
199
|
-
async
|
|
211
|
+
async remove(key) {
|
|
200
212
|
const brain = this.cache.get(key);
|
|
201
213
|
if (!brain)
|
|
202
214
|
return;
|
|
203
|
-
|
|
204
|
-
await brain.flush();
|
|
205
|
-
}
|
|
206
|
-
finally {
|
|
207
|
-
this.cache.delete(key);
|
|
208
|
-
}
|
|
209
|
-
}
|
|
210
|
-
/**
|
|
211
|
-
* Evicts a specific instance from the pool without flushing.
|
|
212
|
-
*
|
|
213
|
-
* Use this after `brain.clear()`: the clear operation already handles all
|
|
214
|
-
* storage and index cleanup internally, so no flush is needed. Calling
|
|
215
|
-
* `flush()` after `clear()` crashes because `clear()` tears down the
|
|
216
|
-
* internal indexes that `flush()` requires.
|
|
217
|
-
*
|
|
218
|
-
* The evicted instance is simply removed from the cache; the next call to
|
|
219
|
-
* `forScope()` / `forUser()` / `forTenant()` will create a fresh instance.
|
|
220
|
-
*
|
|
221
|
-
* @param key - The scope key (as stored in the pool).
|
|
222
|
-
* @returns `true` if an entry was removed, `false` if the key was not cached.
|
|
223
|
-
*/
|
|
224
|
-
evict(key) {
|
|
225
|
-
if (!this.cache.has(key))
|
|
226
|
-
return false;
|
|
215
|
+
// Delete from cache first so dispose() does not fire a second close().
|
|
227
216
|
this.cache.delete(key);
|
|
228
|
-
|
|
217
|
+
await brain.close();
|
|
229
218
|
}
|
|
230
219
|
/**
|
|
231
|
-
*
|
|
220
|
+
* Closes all cached instances and clears the pool.
|
|
232
221
|
*
|
|
233
|
-
* Calls `brain.
|
|
234
|
-
*
|
|
222
|
+
* Calls `brain.close()` on every live instance concurrently, which flushes
|
|
223
|
+
* deferred HNSW dirty nodes and frees all resources. The instances remain
|
|
224
|
+
* removed from the cache after this call.
|
|
235
225
|
*/
|
|
236
|
-
async
|
|
237
|
-
const
|
|
238
|
-
for (const brain of this.cache.
|
|
239
|
-
|
|
240
|
-
|
|
226
|
+
async closeAll() {
|
|
227
|
+
const closes = [];
|
|
228
|
+
for (const [key, brain] of this.cache.entries()) {
|
|
229
|
+
this.cache.delete(key);
|
|
230
|
+
closes.push(brain.close().catch((err) => {
|
|
231
|
+
console.error('[SDK/pool] closeAll error:', err);
|
|
241
232
|
}));
|
|
242
233
|
}
|
|
243
|
-
await Promise.all(
|
|
234
|
+
await Promise.all(closes);
|
|
244
235
|
}
|
|
245
236
|
/**
|
|
246
237
|
* Gracefully shuts down the pool.
|
|
247
238
|
*
|
|
248
|
-
*
|
|
249
|
-
*
|
|
239
|
+
* Closes all instances (flushing deferred writes and freeing resources), then
|
|
240
|
+
* clears the pending-init map. After `shutdown()` the pool is empty.
|
|
250
241
|
*/
|
|
251
242
|
async shutdown() {
|
|
252
|
-
await this.
|
|
253
|
-
this.cache.clear();
|
|
243
|
+
await this.closeAll();
|
|
254
244
|
this.pending.clear();
|
|
255
245
|
}
|
|
256
246
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instance-pool.js","sourceRoot":"","sources":["../../src/server/instance-pool.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"instance-pool.js","sourceRoot":"","sources":["../../src/server/instance-pool.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -12,7 +12,7 @@ export type InstanceStrategy = 'per-user' | 'per-tenant' | 'per-scope';
|
|
|
12
12
|
export type Transport = 'http' | 'ws' | 'sse' | 'local';
|
|
13
13
|
/**
|
|
14
14
|
* @description The top-level SDK interface. Every module namespace is accessible
|
|
15
|
-
* as a property. Server mode additionally exposes shutdown()
|
|
15
|
+
* as a property. Server mode additionally exposes shutdown().
|
|
16
16
|
* Client mode exposes connect() for WebSocket transports.
|
|
17
17
|
*/
|
|
18
18
|
export interface SoulcraftSDK {
|
|
@@ -43,10 +43,8 @@ export interface SoulcraftSDK {
|
|
|
43
43
|
* Present only when @soulcraft/hall is installed and configured in ServerSDKOptions.hall.
|
|
44
44
|
*/
|
|
45
45
|
readonly hall?: HallModule;
|
|
46
|
-
/** Server-mode only: gracefully
|
|
46
|
+
/** Server-mode only: gracefully close all Brainy instances and release resources. */
|
|
47
47
|
shutdown?(): Promise<void>;
|
|
48
|
-
/** Server-mode only: flush a specific user/tenant's Brainy instance to storage. */
|
|
49
|
-
flush?(scopeKey: string): Promise<void>;
|
|
50
48
|
/** Client-mode only: connect the WebSocket transport. */
|
|
51
49
|
connect?(): Promise<void>;
|
|
52
50
|
/** Client-mode only: disconnect and clean up. */
|
|
@@ -102,7 +100,6 @@ export interface ServerSDKOptions extends SDKOptions {
|
|
|
102
100
|
/** For per-scope: custom key function called with (userId, workspaceId). */
|
|
103
101
|
scopeKey?: (userId: string, workspaceId: string) => string;
|
|
104
102
|
maxInstances?: number;
|
|
105
|
-
flushOnEvict?: boolean;
|
|
106
103
|
};
|
|
107
104
|
};
|
|
108
105
|
auth: {
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,wEAAwE;AACxE,MAAM,MAAM,gBAAgB,GAAG,UAAU,GAAG,OAAO,GAAG,SAAS,GAAG,QAAQ,CAAA;AAE1E,0CAA0C;AAC1C,MAAM,MAAM,gBAAgB,GAAG,UAAU,GAAG,YAAY,GAAG,WAAW,CAAA;AAEtE,uDAAuD;AACvD,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,IAAI,GAAG,KAAK,GAAG,OAAO,CAAA;AAEvD;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC3B,qFAAqF;IACrF,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAA;IAC7B,mFAAmF;IACnF,QAAQ,CAAC,GAAG,EAAE,SAAS,CAAA;IACvB,mEAAmE;IACnE,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAA;IACjC,oEAAoE;IACpE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAA;IACzB,kEAAkE;IAClE,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAA;IAC/B,kFAAkF;IAClF,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAA;IACrB,sFAAsF;IACtF,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAA;IAC7B,6EAA6E;IAC7E,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAA;IAC7B,wEAAwE;IACxE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAA;IACzB,0EAA0E;IAC1E,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAA;IAC/B,wEAAwE;IACxE,QAAQ,CAAC,aAAa,EAAE,mBAAmB,CAAA;IAC3C;;;OAGG;IACH,QAAQ,CAAC,IAAI,CAAC,EAAE,UAAU,CAAA;IAE1B,qFAAqF;IACrF,QAAQ,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IAC1B,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/version.d.ts
CHANGED
package/dist/version.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,kDAAkD;AAClD,eAAO,MAAM,WAAW,
|
|
1
|
+
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,kDAAkD;AAClD,eAAO,MAAM,WAAW,WAAW,CAAA"}
|
package/dist/version.js
CHANGED
package/dist/version.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,kDAAkD;AAClD,MAAM,CAAC,MAAM,WAAW,GAAG,
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,kDAAkD;AAClD,MAAM,CAAC,MAAM,WAAW,GAAG,QAAQ,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@soulcraft/sdk",
|
|
3
|
-
"version": "1.4.
|
|
4
|
-
"description": "The unified Soulcraft platform SDK
|
|
3
|
+
"version": "1.4.12",
|
|
4
|
+
"description": "The unified Soulcraft platform SDK — data, auth, AI, billing, and notifications",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"publishConfig": {
|
|
7
7
|
"access": "restricted",
|