@mysten-incubation/memwal 0.0.1-dev.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.
Files changed (44) hide show
  1. package/README.md +59 -0
  2. package/dist/account-entry.d.ts +14 -0
  3. package/dist/account-entry.d.ts.map +1 -0
  4. package/dist/account-entry.js +14 -0
  5. package/dist/account-entry.js.map +1 -0
  6. package/dist/account.d.ts +87 -0
  7. package/dist/account.d.ts.map +1 -0
  8. package/dist/account.js +273 -0
  9. package/dist/account.js.map +1 -0
  10. package/dist/ai/index.d.ts +3 -0
  11. package/dist/ai/index.d.ts.map +1 -0
  12. package/dist/ai/index.js +2 -0
  13. package/dist/ai/index.js.map +1 -0
  14. package/dist/ai/middleware.d.ts +55 -0
  15. package/dist/ai/middleware.d.ts.map +1 -0
  16. package/dist/ai/middleware.js +145 -0
  17. package/dist/ai/middleware.js.map +1 -0
  18. package/dist/core.d.ts.map +1 -0
  19. package/dist/core.js.map +1 -0
  20. package/dist/index.d.ts +16 -0
  21. package/dist/index.d.ts.map +1 -0
  22. package/dist/index.js +17 -0
  23. package/dist/index.js.map +1 -0
  24. package/dist/manual-entry.d.ts +12 -0
  25. package/dist/manual-entry.d.ts.map +1 -0
  26. package/dist/manual-entry.js +11 -0
  27. package/dist/manual-entry.js.map +1 -0
  28. package/dist/manual.d.ts +97 -0
  29. package/dist/manual.d.ts.map +1 -0
  30. package/dist/manual.js +498 -0
  31. package/dist/manual.js.map +1 -0
  32. package/dist/memwal.d.ts +174 -0
  33. package/dist/memwal.d.ts.map +1 -0
  34. package/dist/memwal.js +283 -0
  35. package/dist/memwal.js.map +1 -0
  36. package/dist/types.d.ts +237 -0
  37. package/dist/types.d.ts.map +1 -0
  38. package/dist/types.js +8 -0
  39. package/dist/types.js.map +1 -0
  40. package/dist/utils.d.ts +38 -0
  41. package/dist/utils.d.ts.map +1 -0
  42. package/dist/utils.js +84 -0
  43. package/dist/utils.js.map +1 -0
  44. package/package.json +88 -0
package/README.md ADDED
@@ -0,0 +1,59 @@
1
+ # @mysten-incubation/memwal
2
+
3
+ Privacy-first AI memory SDK for storing encrypted memories on Walrus and retrieving them with semantic search.
4
+
5
+ > MemWal is currently in beta and actively evolving. While fully usable today, we continue to refine the developer experience and operational guidance. We welcome feedback from early builders as we continue to improve the product.
6
+
7
+ ## Documentation
8
+
9
+ For full documentation, visit [docs.memwal.ai](https://docs.memwal.ai).
10
+
11
+ ## Install
12
+
13
+ ```bash
14
+ pnpm add @mysten-incubation/memwal
15
+ ```
16
+
17
+ Peer dependencies (install as needed):
18
+
19
+ ```bash
20
+ pnpm add @mysten/sui @mysten/seal @mysten/walrus ai zod
21
+ ```
22
+
23
+ ## Quick Start
24
+
25
+ ```ts
26
+ import { MemWal } from "@mysten-incubation/memwal";
27
+
28
+ const memwal = MemWal.create({
29
+ key: "your-delegate-key-hex",
30
+ accountId: "your-memwal-account-id",
31
+ serverUrl: "https://your-relayer-url.com",
32
+ namespace: "demo",
33
+ });
34
+
35
+ await memwal.remember("User prefers dark mode and uses TypeScript.");
36
+ const memories = await memwal.recall("What are the user's preferences?");
37
+ await memwal.restore("demo");
38
+ ```
39
+
40
+ If you are self-hosting the relayer and do not have an account ID yet, see [Self-Hosting](../../docs/relayer/self-hosting.md) for the account creation and delegate key setup flow.
41
+
42
+ ## Exports
43
+
44
+ | Entry | Description |
45
+ |---|---|
46
+ | `@mysten-incubation/memwal` | Default client (`MemWal`). The relayer handles embedding, encryption, Walrus upload/download, retrieval, and restore. |
47
+ | `@mysten-incubation/memwal/manual` | Manual client flow (`MemWalManual`). You handle embedding calls and local SEAL operations. The relayer still handles upload relay, registration, search, and restore. |
48
+ | `@mysten-incubation/memwal/ai` | Vercel AI SDK integration - wraps `MemWal` as middleware for use with `streamText`, `generateText`, etc. |
49
+
50
+ ## How It Works
51
+
52
+ 1. **Scope** - Each memory operation runs inside an `owner + namespace` boundary
53
+ 2. **Store** - The relayer embeds, encrypts, uploads to Walrus, and stores vector metadata in PostgreSQL
54
+ 3. **Recall** - The relayer searches by owner plus namespace, resolves matching blobs, and returns plaintext results
55
+ 4. **Restore** - The relayer can incrementally rebuild missing indexed entries for one namespace
56
+
57
+ ## License
58
+
59
+ Apache 2.0 — see [LICENSE](../../LICENSE)
@@ -0,0 +1,14 @@
1
+ /**
2
+ * @mysten-incubation/memwal/account
3
+ *
4
+ * Account management entry point — on-chain operations.
5
+ * Requires @mysten/sui as a peer dependency.
6
+ *
7
+ * @example
8
+ * ```typescript
9
+ * import { createAccount, addDelegateKey, generateDelegateKey } from "@mysten-incubation/memwal/account"
10
+ * ```
11
+ */
12
+ export { createAccount, addDelegateKey, removeDelegateKey, generateDelegateKey } from "./account.js";
13
+ export type { CreateAccountOpts, CreateAccountResult, AddDelegateKeyOpts, AddDelegateKeyResult, RemoveDelegateKeyOpts, } from "./types.js";
14
+ //# sourceMappingURL=account-entry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"account-entry.d.ts","sourceRoot":"","sources":["../src/account-entry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAGrG,YAAY,EACR,iBAAiB,EACjB,mBAAmB,EACnB,kBAAkB,EAClB,oBAAoB,EACpB,qBAAqB,GACxB,MAAM,YAAY,CAAC"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * @mysten-incubation/memwal/account
3
+ *
4
+ * Account management entry point — on-chain operations.
5
+ * Requires @mysten/sui as a peer dependency.
6
+ *
7
+ * @example
8
+ * ```typescript
9
+ * import { createAccount, addDelegateKey, generateDelegateKey } from "@mysten-incubation/memwal/account"
10
+ * ```
11
+ */
12
+ // Account management (on-chain: create account, add/remove delegate keys)
13
+ export { createAccount, addDelegateKey, removeDelegateKey, generateDelegateKey } from "./account.js";
14
+ //# sourceMappingURL=account-entry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"account-entry.js","sourceRoot":"","sources":["../src/account-entry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,0EAA0E;AAC1E,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,87 @@
1
+ /**
2
+ * memwal — Account Management
3
+ *
4
+ * On-chain account operations: create account, add/remove delegate keys.
5
+ * Supports both wallet signing (browser) and private key signing (server-side).
6
+ *
7
+ * @example
8
+ * ```typescript
9
+ * import { createAccount, addDelegateKey, generateDelegateKey } from "@mysten-incubation/memwal/account"
10
+ *
11
+ * // Generate a delegate keypair
12
+ * const delegate = await generateDelegateKey()
13
+ *
14
+ * // Create account (wallet mode — browser)
15
+ * const account = await createAccount({
16
+ * packageId: "0x...",
17
+ * registryId: "0x...",
18
+ * walletSigner,
19
+ * })
20
+ *
21
+ * // Add the delegate key
22
+ * await addDelegateKey({
23
+ * packageId: "0x...",
24
+ * accountId: account.accountId,
25
+ * publicKey: delegate.publicKey,
26
+ * label: "My Laptop",
27
+ * walletSigner,
28
+ * })
29
+ *
30
+ * // Now use the delegate key with the SDK
31
+ * const memwal = MemWal.create({ key: delegate.privateKey, accountId: account.accountId })
32
+ * ```
33
+ */
34
+ import type { CreateAccountOpts, CreateAccountResult, AddDelegateKeyOpts, AddDelegateKeyResult, RemoveDelegateKeyOpts } from "./types.js";
35
+ /**
36
+ * Create a new MemWalAccount on-chain.
37
+ *
38
+ * Calls `{packageId}::account::create_account(registry, clock)`.
39
+ * Each address can only create ONE account (enforced by the contract).
40
+ *
41
+ * @returns CreateAccountResult with accountId, owner, and tx digest
42
+ */
43
+ export declare function createAccount(opts: CreateAccountOpts): Promise<CreateAccountResult>;
44
+ /**
45
+ * Add a delegate key to a MemWalAccount.
46
+ *
47
+ * Calls `{packageId}::account::add_delegate_key(account, public_key, sui_address, label, clock)`.
48
+ * Only the account owner can add delegate keys.
49
+ *
50
+ * @param opts.publicKey - Ed25519 public key (32 bytes Uint8Array or hex string)
51
+ * @param opts.label - Human-readable label (e.g. "MacBook Pro", "Production Server")
52
+ * @returns AddDelegateKeyResult with digest, publicKey hex, and derived suiAddress
53
+ */
54
+ export declare function addDelegateKey(opts: AddDelegateKeyOpts): Promise<AddDelegateKeyResult>;
55
+ /**
56
+ * Remove a delegate key from a MemWalAccount.
57
+ *
58
+ * Calls `{packageId}::account::remove_delegate_key(account, public_key)`.
59
+ * Only the account owner can remove delegate keys.
60
+ *
61
+ * @param opts.publicKey - Ed25519 public key to remove (32 bytes Uint8Array or hex string)
62
+ */
63
+ export declare function removeDelegateKey(opts: RemoveDelegateKeyOpts): Promise<{
64
+ digest: string;
65
+ }>;
66
+ /**
67
+ * Generate a new Ed25519 delegate keypair.
68
+ *
69
+ * Returns the private key (hex), public key (bytes), and derived Sui address.
70
+ * The private key can be used with `MemWal.create({ key })`.
71
+ *
72
+ * @example
73
+ * ```typescript
74
+ * const delegate = await generateDelegateKey()
75
+ * console.log(delegate.privateKey) // hex string — store securely!
76
+ * console.log(delegate.suiAddress) // 0x... — use in addDelegateKey
77
+ *
78
+ * // Use with SDK
79
+ * const memwal = MemWal.create({ key: delegate.privateKey, accountId: "0x..." })
80
+ * ```
81
+ */
82
+ export declare function generateDelegateKey(): Promise<{
83
+ privateKey: string;
84
+ publicKey: Uint8Array;
85
+ suiAddress: string;
86
+ }>;
87
+ //# sourceMappingURL=account.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"account.d.ts","sourceRoot":"","sources":["../src/account.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAEH,OAAO,KAAK,EAER,iBAAiB,EACjB,mBAAmB,EACnB,kBAAkB,EAClB,oBAAoB,EACpB,qBAAqB,EACxB,MAAM,YAAY,CAAC;AA4GpB;;;;;;;GAOG;AACH,wBAAsB,aAAa,CAC/B,IAAI,EAAE,iBAAiB,GACxB,OAAO,CAAC,mBAAmB,CAAC,CA4C9B;AAMD;;;;;;;;;GASG;AACH,wBAAsB,cAAc,CAChC,IAAI,EAAE,kBAAkB,GACzB,OAAO,CAAC,oBAAoB,CAAC,CAyC/B;AAMD;;;;;;;GAOG;AACH,wBAAsB,iBAAiB,CACnC,IAAI,EAAE,qBAAqB,GAC5B,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAwB7B;AAMD;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC;IACjD,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,UAAU,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;CACtB,CAAC,CAqBD"}
@@ -0,0 +1,273 @@
1
+ /**
2
+ * memwal — Account Management
3
+ *
4
+ * On-chain account operations: create account, add/remove delegate keys.
5
+ * Supports both wallet signing (browser) and private key signing (server-side).
6
+ *
7
+ * @example
8
+ * ```typescript
9
+ * import { createAccount, addDelegateKey, generateDelegateKey } from "@mysten-incubation/memwal/account"
10
+ *
11
+ * // Generate a delegate keypair
12
+ * const delegate = await generateDelegateKey()
13
+ *
14
+ * // Create account (wallet mode — browser)
15
+ * const account = await createAccount({
16
+ * packageId: "0x...",
17
+ * registryId: "0x...",
18
+ * walletSigner,
19
+ * })
20
+ *
21
+ * // Add the delegate key
22
+ * await addDelegateKey({
23
+ * packageId: "0x...",
24
+ * accountId: account.accountId,
25
+ * publicKey: delegate.publicKey,
26
+ * label: "My Laptop",
27
+ * walletSigner,
28
+ * })
29
+ *
30
+ * // Now use the delegate key with the SDK
31
+ * const memwal = MemWal.create({ key: delegate.privateKey, accountId: account.accountId })
32
+ * ```
33
+ */
34
+ import { bytesToHex, hexToBytes } from "./utils.js";
35
+ // ============================================================
36
+ // SUI Clock object (shared, always 0x6)
37
+ // ============================================================
38
+ const SUI_CLOCK = "0x0000000000000000000000000000000000000000000000000000000000000006";
39
+ async function buildTxContext(opts) {
40
+ if (!opts.suiPrivateKey && !opts.walletSigner) {
41
+ throw new Error("Provide either suiPrivateKey or walletSigner");
42
+ }
43
+ if (opts.suiPrivateKey && opts.walletSigner) {
44
+ throw new Error("Provide suiPrivateKey OR walletSigner, not both");
45
+ }
46
+ const { Transaction } = await import("@mysten/sui/transactions");
47
+ // Build Sui client
48
+ let suiClient;
49
+ if (opts.suiClient) {
50
+ suiClient = opts.suiClient;
51
+ }
52
+ else {
53
+ const mod = await import("@mysten/sui/client");
54
+ const SuiClient = mod.SuiClient;
55
+ if (typeof SuiClient !== "function") {
56
+ throw new Error("SuiClient not found. For @mysten/sui v2.6.0+, pass suiClient in opts.");
57
+ }
58
+ const network = opts.suiNetwork ?? "mainnet";
59
+ const urls = {
60
+ testnet: "https://fullnode.testnet.sui.io:443",
61
+ mainnet: "https://fullnode.mainnet.sui.io:443",
62
+ };
63
+ suiClient = new SuiClient({ url: urls[network] ?? urls.mainnet });
64
+ }
65
+ // Build signer
66
+ if (opts.walletSigner) {
67
+ return {
68
+ suiClient,
69
+ signer: opts.walletSigner,
70
+ address: opts.walletSigner.address,
71
+ Transaction,
72
+ };
73
+ }
74
+ const { decodeSuiPrivateKey } = await import("@mysten/sui/cryptography");
75
+ const { Ed25519Keypair } = await import("@mysten/sui/keypairs/ed25519");
76
+ const { secretKey } = decodeSuiPrivateKey(opts.suiPrivateKey);
77
+ const keypair = Ed25519Keypair.fromSecretKey(secretKey);
78
+ return {
79
+ suiClient,
80
+ signer: keypair,
81
+ address: keypair.getPublicKey().toSuiAddress(),
82
+ Transaction,
83
+ };
84
+ }
85
+ async function signAndExecute(ctx, tx) {
86
+ if ("signAndExecuteTransaction" in ctx.signer && typeof ctx.signer.signAndExecuteTransaction === "function" && "address" in ctx.signer) {
87
+ // WalletSigner mode
88
+ const result = await ctx.signer.signAndExecuteTransaction({ transaction: tx });
89
+ // Wait for transaction to be confirmed
90
+ const txResult = await ctx.suiClient.waitForTransaction({
91
+ digest: result.digest,
92
+ options: { showEffects: true, showObjectChanges: true },
93
+ });
94
+ return { digest: result.digest, effects: txResult };
95
+ }
96
+ // Keypair mode
97
+ const result = await ctx.suiClient.signAndExecuteTransaction({
98
+ signer: ctx.signer,
99
+ transaction: tx,
100
+ });
101
+ const txResult = await ctx.suiClient.waitForTransaction({
102
+ digest: result.digest,
103
+ options: { showEffects: true, showObjectChanges: true },
104
+ });
105
+ return { digest: result.digest, effects: txResult };
106
+ }
107
+ // ============================================================
108
+ // createAccount
109
+ // ============================================================
110
+ /**
111
+ * Create a new MemWalAccount on-chain.
112
+ *
113
+ * Calls `{packageId}::account::create_account(registry, clock)`.
114
+ * Each address can only create ONE account (enforced by the contract).
115
+ *
116
+ * @returns CreateAccountResult with accountId, owner, and tx digest
117
+ */
118
+ export async function createAccount(opts) {
119
+ const ctx = await buildTxContext(opts);
120
+ const { Transaction } = ctx;
121
+ const tx = new Transaction();
122
+ tx.moveCall({
123
+ target: `${opts.packageId}::account::create_account`,
124
+ arguments: [
125
+ tx.object(opts.registryId),
126
+ tx.object(SUI_CLOCK),
127
+ ],
128
+ });
129
+ const { digest, effects } = await signAndExecute(ctx, tx);
130
+ // Extract the created MemWalAccount object ID from object changes
131
+ let accountId = "";
132
+ const objectChanges = effects?.objectChanges ?? [];
133
+ for (const change of objectChanges) {
134
+ if (change.type === "created" &&
135
+ change.objectType?.includes("::account::MemWalAccount")) {
136
+ accountId = change.objectId;
137
+ break;
138
+ }
139
+ }
140
+ if (!accountId) {
141
+ // Fallback: try to find from effects
142
+ const created = effects?.effects?.created ?? [];
143
+ for (const obj of created) {
144
+ if (obj.owner?.Shared !== undefined) {
145
+ accountId = obj.reference?.objectId ?? "";
146
+ break;
147
+ }
148
+ }
149
+ }
150
+ return {
151
+ accountId,
152
+ owner: ctx.address,
153
+ digest,
154
+ };
155
+ }
156
+ // ============================================================
157
+ // addDelegateKey
158
+ // ============================================================
159
+ /**
160
+ * Add a delegate key to a MemWalAccount.
161
+ *
162
+ * Calls `{packageId}::account::add_delegate_key(account, public_key, sui_address, label, clock)`.
163
+ * Only the account owner can add delegate keys.
164
+ *
165
+ * @param opts.publicKey - Ed25519 public key (32 bytes Uint8Array or hex string)
166
+ * @param opts.label - Human-readable label (e.g. "MacBook Pro", "Production Server")
167
+ * @returns AddDelegateKeyResult with digest, publicKey hex, and derived suiAddress
168
+ */
169
+ export async function addDelegateKey(opts) {
170
+ const ctx = await buildTxContext(opts);
171
+ const { Transaction } = ctx;
172
+ // Normalize public key to Uint8Array
173
+ const pkBytes = typeof opts.publicKey === "string"
174
+ ? hexToBytes(opts.publicKey)
175
+ : opts.publicKey;
176
+ if (pkBytes.length !== 32) {
177
+ throw new Error(`Invalid Ed25519 public key length: ${pkBytes.length} (expected 32)`);
178
+ }
179
+ // Derive Sui address from the public key
180
+ const { blake2b } = await import("@noble/hashes/blake2.js");
181
+ const input = new Uint8Array(33);
182
+ input[0] = 0x00; // Ed25519 scheme flag
183
+ input.set(pkBytes, 1);
184
+ const addressBytes = blake2b(input, { dkLen: 32 });
185
+ const suiAddress = "0x" + bytesToHex(addressBytes);
186
+ const tx = new Transaction();
187
+ tx.moveCall({
188
+ target: `${opts.packageId}::account::add_delegate_key`,
189
+ arguments: [
190
+ tx.object(opts.accountId),
191
+ tx.pure("vector<u8>", Array.from(pkBytes)),
192
+ tx.pure("address", suiAddress),
193
+ tx.pure("string", opts.label),
194
+ tx.object(SUI_CLOCK),
195
+ ],
196
+ });
197
+ const { digest } = await signAndExecute(ctx, tx);
198
+ return {
199
+ digest,
200
+ publicKey: bytesToHex(pkBytes),
201
+ suiAddress,
202
+ };
203
+ }
204
+ // ============================================================
205
+ // removeDelegateKey
206
+ // ============================================================
207
+ /**
208
+ * Remove a delegate key from a MemWalAccount.
209
+ *
210
+ * Calls `{packageId}::account::remove_delegate_key(account, public_key)`.
211
+ * Only the account owner can remove delegate keys.
212
+ *
213
+ * @param opts.publicKey - Ed25519 public key to remove (32 bytes Uint8Array or hex string)
214
+ */
215
+ export async function removeDelegateKey(opts) {
216
+ const ctx = await buildTxContext(opts);
217
+ const { Transaction } = ctx;
218
+ const pkBytes = typeof opts.publicKey === "string"
219
+ ? hexToBytes(opts.publicKey)
220
+ : opts.publicKey;
221
+ if (pkBytes.length !== 32) {
222
+ throw new Error(`Invalid Ed25519 public key length: ${pkBytes.length} (expected 32)`);
223
+ }
224
+ const tx = new Transaction();
225
+ tx.moveCall({
226
+ target: `${opts.packageId}::account::remove_delegate_key`,
227
+ arguments: [
228
+ tx.object(opts.accountId),
229
+ tx.pure("vector<u8>", Array.from(pkBytes)),
230
+ ],
231
+ });
232
+ const { digest } = await signAndExecute(ctx, tx);
233
+ return { digest };
234
+ }
235
+ // ============================================================
236
+ // generateDelegateKey
237
+ // ============================================================
238
+ /**
239
+ * Generate a new Ed25519 delegate keypair.
240
+ *
241
+ * Returns the private key (hex), public key (bytes), and derived Sui address.
242
+ * The private key can be used with `MemWal.create({ key })`.
243
+ *
244
+ * @example
245
+ * ```typescript
246
+ * const delegate = await generateDelegateKey()
247
+ * console.log(delegate.privateKey) // hex string — store securely!
248
+ * console.log(delegate.suiAddress) // 0x... — use in addDelegateKey
249
+ *
250
+ * // Use with SDK
251
+ * const memwal = MemWal.create({ key: delegate.privateKey, accountId: "0x..." })
252
+ * ```
253
+ */
254
+ export async function generateDelegateKey() {
255
+ const ed = await import("@noble/ed25519");
256
+ const { blake2b } = await import("@noble/hashes/blake2.js");
257
+ // Generate random 32-byte private key
258
+ const privateKeyBytes = new Uint8Array(32);
259
+ globalThis.crypto.getRandomValues(privateKeyBytes);
260
+ const publicKey = await ed.getPublicKeyAsync(privateKeyBytes);
261
+ // Derive Sui address
262
+ const input = new Uint8Array(33);
263
+ input[0] = 0x00; // Ed25519 scheme flag
264
+ input.set(publicKey, 1);
265
+ const addressBytes = blake2b(input, { dkLen: 32 });
266
+ const suiAddress = "0x" + bytesToHex(addressBytes);
267
+ return {
268
+ privateKey: bytesToHex(privateKeyBytes),
269
+ publicKey,
270
+ suiAddress,
271
+ };
272
+ }
273
+ //# sourceMappingURL=account.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"account.js","sourceRoot":"","sources":["../src/account.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export { withMemWal } from "./middleware.js";
2
+ export type { WithMemWalOptions } from "./middleware.js";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ai/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,YAAY,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { withMemWal } from "./middleware.js";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ai/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * MemWal AI SDK Integration — withMemWal Middleware
3
+ *
4
+ * Wraps any AI SDK model with automatic memory management.
5
+ *
6
+ * @example
7
+ * ```typescript
8
+ * import { generateText } from "ai"
9
+ * import { withMemWal } from "@mysten-incubation/memwal/ai"
10
+ * import { openai } from "@ai-sdk/openai"
11
+ *
12
+ * const model = withMemWal(openai("gpt-4o"), {
13
+ * key: process.env.MEMWAL_KEY, // Ed25519 delegate key (hex)
14
+ * })
15
+ *
16
+ * const result = await generateText({
17
+ * model,
18
+ * messages: [{ role: "user", content: "What do you know about me?" }]
19
+ * })
20
+ * // → Automatically searches memories, injects context, saves new facts
21
+ * ```
22
+ */
23
+ import type { MemWalConfig } from "../types.js";
24
+ /**
25
+ * Accept both LanguageModelV2 (ai SDK v4/v5) and LanguageModelV3 (ai SDK v6+).
26
+ * We use `any` because LanguageModelV3 may not exist in older @ai-sdk/provider,
27
+ * and the two interfaces are structurally incompatible at the type level.
28
+ * `wrapLanguageModel` from `ai` handles version detection internally.
29
+ */
30
+ type AnyLanguageModel = any;
31
+ export interface WithMemWalOptions extends MemWalConfig {
32
+ /** Max memories to inject per request (default: 5) */
33
+ maxMemories?: number;
34
+ /** Auto-save new facts from conversation (default: true) */
35
+ autoSave?: boolean;
36
+ /** Minimum similarity score to include a memory (0-1, default: 0.3) */
37
+ minRelevance?: number;
38
+ /** Enable debug logging (default: false) */
39
+ debug?: boolean;
40
+ }
41
+ /**
42
+ * Wrap an AI SDK model with MemWal memory management
43
+ *
44
+ * BEFORE each LLM call:
45
+ * - Uses the last user message as a search query
46
+ * - Recalls relevant memories (server: search → download → decrypt)
47
+ * - Injects relevant memories into the system prompt
48
+ *
49
+ * AFTER each LLM call:
50
+ * - Analyzes and saves important facts (server: LLM extract → embed → encrypt → Walrus → store)
51
+ * - Fire-and-forget — does not block the response
52
+ */
53
+ export declare function withMemWal(model: AnyLanguageModel, options: WithMemWalOptions): any;
54
+ export {};
55
+ //# sourceMappingURL=middleware.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../../src/ai/middleware.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAKH,OAAO,KAAK,EAAE,YAAY,EAAgB,MAAM,aAAa,CAAC;AAM9D;;;;;GAKG;AAEH,KAAK,gBAAgB,GAAG,GAAG,CAAC;AAE5B,MAAM,WAAW,iBAAkB,SAAQ,YAAY;IACnD,sDAAsD;IACtD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,4DAA4D;IAC5D,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,uEAAuE;IACvE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,4CAA4C;IAC5C,KAAK,CAAC,EAAE,OAAO,CAAC;CACnB;AAMD;;;;;;;;;;;GAWG;AACH,wBAAgB,UAAU,CACtB,KAAK,EAAE,gBAAgB,EACvB,OAAO,EAAE,iBAAiB,OAmF7B"}