+
+## Returns
+
+`RequestResult`<[`GetApiV1AuthMfaStatusResponses`](../type-aliases/GetApiV1AuthMfaStatusResponses.md), [`GetApiV1AuthMfaStatusErrors`](../type-aliases/GetApiV1AuthMfaStatusErrors.md), `ThrowOnError`>
diff --git a/src/content/sdk/client/Internal/functions/getApiV1Bootstrap.md b/src/content/sdk/client/Internal/functions/getApiV1Bootstrap.md
new file mode 100644
index 00000000..999135ce
--- /dev/null
+++ b/src/content/sdk/client/Internal/functions/getApiV1Bootstrap.md
@@ -0,0 +1,63 @@
+# getApiV1Bootstrap
+
+> **getApiV1Bootstrap**<`ThrowOnError`>(`options?`: [`Options`](../type-aliases/Options.md)<[`GetApiV1BootstrapData`](../type-aliases/GetApiV1BootstrapData.md), `ThrowOnError`>): `RequestResult`<[`GetApiV1BootstrapResponses`](../type-aliases/GetApiV1BootstrapResponses.md), [`GetApiV1BootstrapErrors`](../type-aliases/GetApiV1BootstrapErrors.md), `ThrowOnError`>
+
+Defined in: [src/client/sdk.gen.ts:628](https://github.com/anuma-ai/sdk/blob/main/src/client/sdk.gen.ts#628)
+
+Bootstrap client session
+
+Returns the authenticated user identity, feature-flag assignments, and server build metadata in a single call. Intended to be called once after auth resolves on the client.
+
+## Type Parameters
+
+
-
-## Returns
-
-`RequestResult`<[`PostApiV1CreditsClaimDailyResponses`](../type-aliases/PostApiV1CreditsClaimDailyResponses.md), [`PostApiV1CreditsClaimDailyErrors`](../type-aliases/PostApiV1CreditsClaimDailyErrors.md), `ThrowOnError`>
diff --git a/src/content/sdk/client/Internal/functions/postApiV1CreditsClaimTask.md b/src/content/sdk/client/Internal/functions/postApiV1CreditsClaimTask.md
deleted file mode 100644
index dc656a00..00000000
--- a/src/content/sdk/client/Internal/functions/postApiV1CreditsClaimTask.md
+++ /dev/null
@@ -1,63 +0,0 @@
-# postApiV1CreditsClaimTask
-
-> **postApiV1CreditsClaimTask**<`ThrowOnError`>(`options`: [`Options`](../type-aliases/Options.md)<[`PostApiV1CreditsClaimTaskData`](../type-aliases/PostApiV1CreditsClaimTaskData.md), `ThrowOnError`>): `RequestResult`<[`PostApiV1CreditsClaimTaskResponses`](../type-aliases/PostApiV1CreditsClaimTaskResponses.md), [`PostApiV1CreditsClaimTaskErrors`](../type-aliases/PostApiV1CreditsClaimTaskErrors.md), `ThrowOnError`>
-
-Defined in: [src/client/sdk.gen.ts:454](https://github.com/anuma-ai/sdk/blob/main/src/client/sdk.gen.ts#454)
-
-Claim task reward
-
-Claims a one-time task reward (e.g., import memories from a chat provider). Each task can only be claimed once per account. The request must include the extracted memories as proof of import completion.
-
-## Type Parameters
-
-
-
-## Returns
-
-`RequestResult`<[`PostApiV1CreditsClaimTaskResponses`](../type-aliases/PostApiV1CreditsClaimTaskResponses.md), [`PostApiV1CreditsClaimTaskErrors`](../type-aliases/PostApiV1CreditsClaimTaskErrors.md), `ThrowOnError`>
diff --git a/src/content/sdk/client/Internal/functions/postApiV1CreditsPurchase.md b/src/content/sdk/client/Internal/functions/postApiV1CreditsPurchase.md
index ceae4a24..618024f7 100644
--- a/src/content/sdk/client/Internal/functions/postApiV1CreditsPurchase.md
+++ b/src/content/sdk/client/Internal/functions/postApiV1CreditsPurchase.md
@@ -2,11 +2,11 @@
> **postApiV1CreditsPurchase**<`ThrowOnError`>(`options`: [`Options`](../type-aliases/Options.md)<[`PostApiV1CreditsPurchaseData`](../type-aliases/PostApiV1CreditsPurchaseData.md), `ThrowOnError`>): `RequestResult`<[`PostApiV1CreditsPurchaseResponses`](../type-aliases/PostApiV1CreditsPurchaseResponses.md), [`PostApiV1CreditsPurchaseErrors`](../type-aliases/PostApiV1CreditsPurchaseErrors.md), `ThrowOnError`>
-Defined in: [src/client/sdk.gen.ts:482](https://github.com/anuma-ai/sdk/blob/main/src/client/sdk.gen.ts#482)
+Defined in: [src/client/sdk.gen.ts:692](https://github.com/anuma-ai/sdk/blob/main/src/client/sdk.gen.ts#692)
Create credit pack checkout session
-Creates a Stripe Checkout Session for purchasing a one-time credit pack and returns the checkout URL. Pro users are charged using the Pro product with bonus credits.
+Creates a Stripe Checkout Session for purchasing a one-time credit pack and returns the checkout URL.
## Type Parameters
diff --git a/src/content/sdk/client/Internal/functions/postApiV1CreditsRedeemTokens.md b/src/content/sdk/client/Internal/functions/postApiV1CreditsRedeemTokens.md
new file mode 100644
index 00000000..803f9102
--- /dev/null
+++ b/src/content/sdk/client/Internal/functions/postApiV1CreditsRedeemTokens.md
@@ -0,0 +1,63 @@
+# postApiV1CreditsRedeemTokens
+
+> **postApiV1CreditsRedeemTokens**<`ThrowOnError`>(`options`: [`Options`](../type-aliases/Options.md)<[`PostApiV1CreditsRedeemTokensData`](../type-aliases/PostApiV1CreditsRedeemTokensData.md), `ThrowOnError`>): `RequestResult`<[`PostApiV1CreditsRedeemTokensResponses`](../type-aliases/PostApiV1CreditsRedeemTokensResponses.md), [`PostApiV1CreditsRedeemTokensErrors`](../type-aliases/PostApiV1CreditsRedeemTokensErrors.md), `ThrowOnError`>
+
+Defined in: [src/client/sdk.gen.ts:708](https://github.com/anuma-ai/sdk/blob/main/src/client/sdk.gen.ts#708)
+
+Redeem Anuma Tokens for credits
+
+Burns the specified amount of Anuma Tokens via the portal operator and adds equivalent credits to the user's enrollment. User must have approved the portal operator to spend their tokens first.
+
+## Type Parameters
+
+
+
+Pre-processors run after the last user message is received but before the
+first LLM request. Each receives the prompt text and a shared embedding
+(computed once per request) and may return messages to enrich the
+conversation. See `createWebSearchPreProcessor`, `createPricePreProcessor`,
+or write a custom one matching `PromptPreProcessor`.
+
+
+
+
+
+
`options.smoothing?`
@@ -295,7 +316,7 @@ const { isLoading, sendMessage, stop } = useChat({
const handleSend = async () => {
const result = await sendMessage({
messages: [{ role: 'user', content: [{ type: 'text', text: 'Hello!' }] }],
- model: 'gpt-4o-mini'
+ model: 'fireworks/accounts/fireworks/models/kimi-k2p5'
});
};
```
diff --git a/src/content/sdk/expo/Hooks/useChatStorage.md b/src/content/sdk/expo/Hooks/useChatStorage.md
index 662e2b6f..c5c8ddbf 100644
--- a/src/content/sdk/expo/Hooks/useChatStorage.md
+++ b/src/content/sdk/expo/Hooks/useChatStorage.md
@@ -542,6 +542,28 @@ Use for live preview of artifacts (HTML, slides) being generated.
+`options.preProcessors?`
+
+
+
+
+`PromptPreProcessor`\[]
+
+
+
+
+Pre-processors run after the last user message is received but before
+the first LLM request. Each receives the prompt text and a shared
+embedding (computed once per request) and may return messages to
+enrich the conversation. Forwarded to the underlying `useChat` hook.
+See `createWebSearchPreProcessor`, `createPricePreProcessor`, or write
+a custom one matching `PromptPreProcessor`.
+
+
+
+
+
+
`options.serverTools?`
@@ -639,7 +661,7 @@ function ChatScreen({ database }: { database: Database }) {
const handleSend = async () => {
const result = await sendMessage({
content: 'Hello!',
- model: 'gpt-4o-mini',
+ model: 'fireworks/accounts/fireworks/models/kimi-k2p5',
includeHistory: true,
});
};
diff --git a/src/content/sdk/expo/Internal/interfaces/UseChatStorageOptions.md b/src/content/sdk/expo/Internal/interfaces/UseChatStorageOptions.md
index bf90db50..f3c3a060 100644
--- a/src/content/sdk/expo/Internal/interfaces/UseChatStorageOptions.md
+++ b/src/content/sdk/expo/Internal/interfaces/UseChatStorageOptions.md
@@ -29,7 +29,7 @@ Which API endpoint to use. Default: "responses"
> `optional` **autoCreateConversation**: `boolean`
-Defined in: [src/lib/db/chat/types.ts:303](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#303)
+Defined in: [src/lib/db/chat/types.ts:336](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#336)
Automatically create a new conversation if none is set (default: true)
@@ -43,7 +43,7 @@ Automatically create a new conversation if none is set (default: true)
> `optional` **autoEmbedMessages**: `boolean`
-Defined in: [src/lib/db/chat/types.ts:361](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#361)
+Defined in: [src/lib/db/chat/types.ts:394](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#394)
Automatically generate embeddings for messages after saving.
Enables semantic search over past conversations via searchMessages().
@@ -80,7 +80,7 @@ true
> `optional` **baseUrl**: `string`
-Defined in: [src/lib/db/chat/types.ts:309](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#309)
+Defined in: [src/lib/db/chat/types.ts:342](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#342)
Base URL for the chat API endpoint
@@ -94,7 +94,7 @@ Base URL for the chat API endpoint
> `optional` **conversationId**: `string`
-Defined in: [src/lib/db/chat/types.ts:301](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#301)
+Defined in: [src/lib/db/chat/types.ts:334](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#334)
ID of an existing conversation to load and continue
@@ -108,7 +108,7 @@ ID of an existing conversation to load and continue
> **database**: `Database`
-Defined in: [src/lib/db/chat/types.ts:299](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#299)
+Defined in: [src/lib/db/chat/types.ts:332](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#332)
WatermelonDB database instance for storing conversations and messages
@@ -122,7 +122,7 @@ WatermelonDB database instance for storing conversations and messages
> `optional` **defaultConversationTitle**: `string`
-Defined in: [src/lib/db/chat/types.ts:305](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#305)
+Defined in: [src/lib/db/chat/types.ts:338](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#338)
Title for auto-created conversations (default: "New conversation")
@@ -146,7 +146,7 @@ Function for silent signing with Privy embedded wallets.
> `optional` **embeddingModel**: `string`
-Defined in: [src/lib/db/chat/types.ts:366](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#366)
+Defined in: [src/lib/db/chat/types.ts:399](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#399)
Embedding model to use when autoEmbedMessages is enabled.
@@ -182,7 +182,7 @@ true
> `optional` **fileProcessingOptions**: `object`
-Defined in: [src/lib/db/chat/types.ts:338](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#338)
+Defined in: [src/lib/db/chat/types.ts:371](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#371)
Options for file preprocessing behavior
@@ -314,7 +314,7 @@ Callback for progress updates
> `optional` **fileProcessors**: [`FileProcessor`](../../../react/Internal/interfaces/FileProcessor.md)\[] | `null`
-Defined in: [src/lib/db/chat/types.ts:334](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#334)
+Defined in: [src/lib/db/chat/types.ts:367](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#367)
File preprocessors to use for automatic text extraction.
@@ -332,7 +332,7 @@ File preprocessors to use for automatic text extraction.
> `optional` **getToken**: () => `Promise`<`string` | `null`>
-Defined in: [src/lib/db/chat/types.ts:307](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#307)
+Defined in: [src/lib/db/chat/types.ts:340](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#340)
Function to retrieve the auth token for API requests
@@ -364,7 +364,7 @@ Async function to poll for wallet address during Privy initialization.
> `optional` **mcpR2Domain**: `string`
-Defined in: [src/lib/db/chat/types.ts:378](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#378)
+Defined in: [src/lib/db/chat/types.ts:411](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#411)
R2 domain for identifying MCP-generated image URLs.
When set, enables OPFS caching of generated images.
@@ -380,7 +380,7 @@ Defaults to the hardcoded MCP\_R2\_DOMAIN from clientConfig.
> `optional` **minContentLength**: `number`
-Defined in: [src/lib/db/chat/types.ts:372](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#372)
+Defined in: [src/lib/db/chat/types.ts:405](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#405)
Minimum content length required to generate embeddings.
Messages shorter than this are skipped as they provide limited semantic value.
@@ -401,7 +401,7 @@ Messages shorter than this are skipped as they provide limited semantic value.
> `optional` **onData**: (`chunk`: `string`) => `void`
-Defined in: [src/lib/db/chat/types.ts:311](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#311)
+Defined in: [src/lib/db/chat/types.ts:344](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#344)
Callback invoked with each streamed response chunk
@@ -444,7 +444,7 @@ Callback invoked with each streamed response chunk
> `optional` **onError**: (`error`: `Error`) => `void`
-Defined in: [src/lib/db/chat/types.ts:317](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#317)
+Defined in: [src/lib/db/chat/types.ts:350](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#350)
Callback invoked when an error occurs during the request
@@ -487,7 +487,7 @@ Callback invoked when an error occurs during the request
> `optional` **onFinish**: (`response`: [`LlmapiResponseResponse`](../../../client/Internal/type-aliases/LlmapiResponseResponse.md)) => `void`
-Defined in: [src/lib/db/chat/types.ts:315](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#315)
+Defined in: [src/lib/db/chat/types.ts:348](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#348)
Callback invoked when the response completes successfully
@@ -530,7 +530,7 @@ Callback invoked when the response completes successfully
> `optional` **onServerToolCall**: (`toolCall`: `ServerToolCallEvent`) => `void`
-Defined in: [src/lib/db/chat/types.ts:322](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#322)
+Defined in: [src/lib/db/chat/types.ts:355](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#355)
Callback invoked when a server-side tool (MCP) is called during streaming.
Use this to show activity indicators like "Searching..." in the UI.
@@ -574,7 +574,7 @@ Use this to show activity indicators like "Searching..." in the UI.
> `optional` **onThinking**: (`chunk`: `string`) => `void`
-Defined in: [src/lib/db/chat/types.ts:313](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#313)
+Defined in: [src/lib/db/chat/types.ts:346](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#346)
Callback invoked when thinking/reasoning content is received (from `` tags or API reasoning)
@@ -617,7 +617,7 @@ Callback invoked when thinking/reasoning content is received (from `` tag
> `optional` **onToolCallArgumentsDelta**: (`event`: [`ToolCallArgumentsDeltaEvent`](../../../react/Internal/type-aliases/ToolCallArgumentsDeltaEvent.md)) => `void`
-Defined in: [src/lib/db/chat/types.ts:327](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#327)
+Defined in: [src/lib/db/chat/types.ts:360](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#360)
Called with partial tool call arguments as they stream in.
Use for live preview of artifacts (HTML, slides) being generated.
@@ -657,11 +657,30 @@ Use for live preview of artifacts (HTML, slides) being generated.
***
+### preProcessors?
+
+> `optional` **preProcessors**: `PromptPreProcessor`\[]
+
+Defined in: [src/lib/db/chat/types.ts:420](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#420)
+
+Pre-processors run after the last user message is received but before
+the first LLM request. Each receives the prompt text and a shared
+embedding (computed once per request) and may return messages to
+enrich the conversation. Forwarded to the underlying `useChat` hook.
+See `createWebSearchPreProcessor`, `createPricePreProcessor`, or write
+a custom one matching `PromptPreProcessor`.
+
+**Inherited from**
+
+`BaseUseChatStorageOptions.preProcessors`
+
+***
+
### serverTools?
> `optional` **serverTools**: `object`
-Defined in: [src/lib/db/chat/types.ts:352](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#352)
+Defined in: [src/lib/db/chat/types.ts:385](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#385)
Configuration for server-side tools fetching and caching.
Server tools are fetched from /api/v1/tools and cached in localStorage.
diff --git a/src/content/sdk/expo/Internal/interfaces/UseChatStorageResult.md b/src/content/sdk/expo/Internal/interfaces/UseChatStorageResult.md
index e5981b63..dd66eee3 100644
--- a/src/content/sdk/expo/Internal/interfaces/UseChatStorageResult.md
+++ b/src/content/sdk/expo/Internal/interfaces/UseChatStorageResult.md
@@ -30,7 +30,7 @@ Clear all queued operations without writing them.
> **conversationId**: `string` | `null`
-Defined in: [src/lib/db/chat/types.ts:718](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#718)
+Defined in: [src/lib/db/chat/types.ts:769](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#769)
**Inherited from**
@@ -42,7 +42,7 @@ Defined in: [src/lib/db/chat/types.ts:718](https://github.com/anuma-ai/sdk/blob/
> **createConversation**: (`options?`: [`CreateConversationOptions`](../../../react/Internal/interfaces/CreateConversationOptions.md)) => `Promise`<[`StoredConversation`](../../../react/Internal/interfaces/StoredConversation.md)>
-Defined in: [src/lib/db/chat/types.ts:720](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#720)
+Defined in: [src/lib/db/chat/types.ts:771](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#771)
**Parameters**
@@ -180,7 +180,7 @@ Create a memory vault tool pre-configured with hook's vault context and encrypti
> **deleteConversation**: (`id`: `string`) => `Promise`<`boolean`>
-Defined in: [src/lib/db/chat/types.ts:724](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#724)
+Defined in: [src/lib/db/chat/types.ts:775](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#775)
**Parameters**
@@ -274,7 +274,7 @@ Manually flush all queued operations for the current wallet.
> **getConversation**: (`id`: `string`) => `Promise`<[`StoredConversation`](../../../react/Internal/interfaces/StoredConversation.md) | `null`>
-Defined in: [src/lib/db/chat/types.ts:721](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#721)
+Defined in: [src/lib/db/chat/types.ts:772](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#772)
**Parameters**
@@ -315,7 +315,7 @@ Defined in: [src/lib/db/chat/types.ts:721](https://github.com/anuma-ai/sdk/blob/
> **getConversations**: () => `Promise`<[`StoredConversation`](../../../react/Internal/interfaces/StoredConversation.md)\[]>
-Defined in: [src/lib/db/chat/types.ts:722](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#722)
+Defined in: [src/lib/db/chat/types.ts:773](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#773)
**Returns**
@@ -331,7 +331,7 @@ Defined in: [src/lib/db/chat/types.ts:722](https://github.com/anuma-ai/sdk/blob/
> **getMessages**: (`conversationId`: `string`) => `Promise`<[`StoredMessage`](../../../react/Internal/interfaces/StoredMessage.md)\[]>
-Defined in: [src/lib/db/chat/types.ts:725](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#725)
+Defined in: [src/lib/db/chat/types.ts:776](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#776)
**Parameters**
@@ -423,7 +423,7 @@ Get all vault memories for context injection.
> **isLoading**: `boolean`
-Defined in: [src/lib/db/chat/types.ts:716](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#716)
+Defined in: [src/lib/db/chat/types.ts:767](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#767)
**Inherited from**
@@ -484,7 +484,7 @@ Send a message and automatically store it (Expo version)
> **setConversationId**: (`id`: `string` | `null`) => `void`
-Defined in: [src/lib/db/chat/types.ts:719](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#719)
+Defined in: [src/lib/db/chat/types.ts:770](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#770)
**Parameters**
@@ -525,7 +525,7 @@ Defined in: [src/lib/db/chat/types.ts:719](https://github.com/anuma-ai/sdk/blob/
> **stop**: () => `void`
-Defined in: [src/lib/db/chat/types.ts:717](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#717)
+Defined in: [src/lib/db/chat/types.ts:768](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#768)
**Returns**
@@ -541,7 +541,7 @@ Defined in: [src/lib/db/chat/types.ts:717](https://github.com/anuma-ai/sdk/blob/
> **updateConversationTitle**: (`id`: `string`, `title`: `string`) => `Promise`<`boolean`>
-Defined in: [src/lib/db/chat/types.ts:723](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#723)
+Defined in: [src/lib/db/chat/types.ts:774](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#774)
**Parameters**
diff --git a/src/content/sdk/expo/index.md b/src/content/sdk/expo/index.md
index b010876c..2a7c455e 100644
--- a/src/content/sdk/expo/index.md
+++ b/src/content/sdk/expo/index.md
@@ -72,7 +72,7 @@ function ChatScreen() {
const handleSend = async () => {
await sendMessage({
messages: [{ role: "user", content: [{ type: "text", text: "Hello!" }] }],
- model: "openai/gpt-4o",
+ model: "fireworks/accounts/fireworks/models/kimi-k2p5",
});
};
@@ -136,18 +136,36 @@ Re-exports [clearAllEncryptionKeys](../react/Internal/functions/clearAllEncrypti
***
+### clearAllEncryptionState
+
+Re-exports [clearAllEncryptionState](../react/Internal/functions/clearAllEncryptionState.md)
+
+***
+
### clearEncryptionKey
Re-exports [clearEncryptionKey](../react/Internal/functions/clearEncryptionKey.md)
***
+### clearLazyTitleCache
+
+Re-exports [clearLazyTitleCache](../react/Internal/functions/clearLazyTitleCache.md)
+
+***
+
### clearServerToolsCache
Re-exports [clearServerToolsCache](../react/Internal/functions/clearServerToolsCache.md)
***
+### cosineInt8
+
+Re-exports [cosineInt8](../react/Internal/functions/cosineInt8.md)
+
+***
+
### CreateConversationOptions
Re-exports [CreateConversationOptions](../react/Internal/interfaces/CreateConversationOptions.md)
@@ -220,6 +238,12 @@ Re-exports [DatabaseManagerOptions](../react/Internal/interfaces/DatabaseManager
***
+### decryptConversationTitle
+
+Re-exports [decryptConversationTitle](../react/Internal/functions/decryptConversationTitle.md)
+
+***
+
### DEFAULT\_CACHE\_EXPIRATION\_MS
Re-exports [DEFAULT\_CACHE\_EXPIRATION\_MS](../react/Internal/variables/DEFAULT_CACHE_EXPIRATION_MS.md)
@@ -244,6 +268,12 @@ Re-exports [deleteVaultMemoryOp](../react/Internal/functions/deleteVaultMemoryOp
***
+### dequantizeEmbedding
+
+Re-exports [dequantizeEmbedding](../react/Internal/functions/dequantizeEmbedding.md)
+
+***
+
### embedAllMessages
Re-exports [embedAllMessages](../react/Internal/functions/embedAllMessages.md)
@@ -322,6 +352,18 @@ Re-exports [getCachedServerTools](../react/Internal/functions/getCachedServerToo
***
+### getConversationsByProjectLazyOp
+
+Re-exports [getConversationsByProjectLazyOp](../react/Internal/functions/getConversationsByProjectLazyOp.md)
+
+***
+
+### getConversationsLazyOp
+
+Re-exports [getConversationsLazyOp](../react/Internal/functions/getConversationsLazyOp.md)
+
+***
+
### getServerTools
Re-exports [getServerTools](../react/Internal/functions/getServerTools.md)
@@ -352,6 +394,12 @@ Re-exports [hasEncryptionKey](../react/Internal/functions/hasEncryptionKey.md)
***
+### LazyStoredConversation
+
+Re-exports [LazyStoredConversation](../react/Internal/interfaces/LazyStoredConversation.md)
+
+***
+
### MemoryEngineEmbeddingOptions
Re-exports [MemoryEngineEmbeddingOptions](../react/Internal/interfaces/MemoryEngineEmbeddingOptions.md)
@@ -394,6 +442,18 @@ Re-exports [PlatformStorage](../react/Internal/interfaces/PlatformStorage.md)
***
+### QuantizedEmbedding
+
+Re-exports [QuantizedEmbedding](../react/Internal/interfaces/QuantizedEmbedding.md)
+
+***
+
+### quantizeEmbedding
+
+Re-exports [quantizeEmbedding](../react/Internal/functions/quantizeEmbedding.md)
+
+***
+
### queueManager
Re-exports [queueManager](../react/Internal/variables/queueManager.md)
diff --git a/src/content/sdk/index.md b/src/content/sdk/index.md
index 55fc4a56..4ef287ef 100644
--- a/src/content/sdk/index.md
+++ b/src/content/sdk/index.md
@@ -30,7 +30,7 @@ const { sendMessage, isLoading, stop } = useChat({
await sendMessage({
messages: [{ role: "user", content: [{ type: "text", text: "Hello!" }] }],
- model: "gpt-4o-mini",
+ model: "fireworks/accounts/fireworks/models/kimi-k2p5",
});
```
@@ -44,7 +44,7 @@ const response = await postApiV1Responses({
messages: [
{ role: "user", content: [{ type: "text", text: "Hello!" }] },
],
- model: "gpt-4o-mini",
+ model: "fireworks/accounts/fireworks/models/kimi-k2p5",
},
headers: {
Authorization: `Bearer ${apiKey}`,
@@ -62,12 +62,11 @@ The SDK provides entry points for different platforms:
## Features
-The SDK gives you access to a unified API across multiple LLM providers (OpenAI,
-Anthropic, Google, and more) through a single integration. Key capabilities
-include:
+The SDK gives you access to a unified API across multiple LLM providers through
+a single integration. Key capabilities include:
* Streaming chat completions with tool calling and auto-execution
-* Extended thinking (Claude) and reasoning (o-series) support
+* Extended thinking and reasoning support
* Long-term memory with semantic search and encrypted storage
* Voice recording and transcription via Whisper
* PDF and image text extraction (OCR)
diff --git a/src/content/sdk/react/Encryption/decryptData.md b/src/content/sdk/react/Encryption/decryptData.md
index 0840f19e..70e77874 100644
--- a/src/content/sdk/react/Encryption/decryptData.md
+++ b/src/content/sdk/react/Encryption/decryptData.md
@@ -2,7 +2,7 @@
> **decryptData**(`encryptedHex`: `string`, `address`: `string`, `version`: `EncryptionKeyVersion`): `Promise`<`string`>
-Defined in: [src/react/useEncryption.ts:506](https://github.com/anuma-ai/sdk/blob/main/src/react/useEncryption.ts#506)
+Defined in: [src/react/useEncryption.ts:627](https://github.com/anuma-ai/sdk/blob/main/src/react/useEncryption.ts#627)
Decrypts data using AES-GCM with the stored encryption key.
diff --git a/src/content/sdk/react/Encryption/decryptDataBatch.md b/src/content/sdk/react/Encryption/decryptDataBatch.md
index c19d5bad..01684318 100644
--- a/src/content/sdk/react/Encryption/decryptDataBatch.md
+++ b/src/content/sdk/react/Encryption/decryptDataBatch.md
@@ -2,7 +2,7 @@
> **decryptDataBatch**(`encryptedValues`: `string`\[], `address`: `string`): `Promise`<`string`\[]>
-Defined in: [src/react/useEncryption.ts:681](https://github.com/anuma-ai/sdk/blob/main/src/react/useEncryption.ts#681)
+Defined in: [src/react/useEncryption.ts:815](https://github.com/anuma-ai/sdk/blob/main/src/react/useEncryption.ts#815)
Batch decrypt multiple values efficiently with a single key lookup.
Much faster than calling decryptData for each value individually.
diff --git a/src/content/sdk/react/Encryption/encryptData.md b/src/content/sdk/react/Encryption/encryptData.md
index eb28149e..97d1af03 100644
--- a/src/content/sdk/react/Encryption/encryptData.md
+++ b/src/content/sdk/react/Encryption/encryptData.md
@@ -2,7 +2,7 @@
> **encryptData**(`plaintext`: `string` | `Uint8Array`<`ArrayBufferLike`>, `address`: `string`): `Promise`<`string`>
-Defined in: [src/react/useEncryption.ts:462](https://github.com/anuma-ai/sdk/blob/main/src/react/useEncryption.ts#462)
+Defined in: [src/react/useEncryption.ts:583](https://github.com/anuma-ai/sdk/blob/main/src/react/useEncryption.ts#583)
Encrypts data using AES-GCM with the stored encryption key.
diff --git a/src/content/sdk/react/Encryption/encryptDataBatch.md b/src/content/sdk/react/Encryption/encryptDataBatch.md
index 7e66afe0..44bb9573 100644
--- a/src/content/sdk/react/Encryption/encryptDataBatch.md
+++ b/src/content/sdk/react/Encryption/encryptDataBatch.md
@@ -2,7 +2,7 @@
> **encryptDataBatch**(`values`: (`string` | `Uint8Array`<`ArrayBufferLike`>)\[], `address`: `string`): `Promise`<`string`\[]>
-Defined in: [src/react/useEncryption.ts:644](https://github.com/anuma-ai/sdk/blob/main/src/react/useEncryption.ts#644)
+Defined in: [src/react/useEncryption.ts:778](https://github.com/anuma-ai/sdk/blob/main/src/react/useEncryption.ts#778)
Batch encrypt multiple values efficiently with a single key lookup.
Much faster than calling encryptData for each value individually.
diff --git a/src/content/sdk/react/Hooks/UseEncryptionResult.md b/src/content/sdk/react/Hooks/UseEncryptionResult.md
index 55147ec4..d2765122 100644
--- a/src/content/sdk/react/Hooks/UseEncryptionResult.md
+++ b/src/content/sdk/react/Hooks/UseEncryptionResult.md
@@ -1,6 +1,6 @@
# UseEncryptionResult
-Defined in: [src/react/useEncryption.ts:1149](https://github.com/anuma-ai/sdk/blob/main/src/react/useEncryption.ts#1149)
+Defined in: [src/react/useEncryption.ts:1348](https://github.com/anuma-ai/sdk/blob/main/src/react/useEncryption.ts#1348)
Result returned by the useEncryption hook.
@@ -10,7 +10,7 @@ Result returned by the useEncryption hook.
> **clearKeyPair**: (`walletAddress`: `string`) => `void`
-Defined in: [src/react/useEncryption.ts:1159](https://github.com/anuma-ai/sdk/blob/main/src/react/useEncryption.ts#1159)
+Defined in: [src/react/useEncryption.ts:1358](https://github.com/anuma-ai/sdk/blob/main/src/react/useEncryption.ts#1358)
Clear the key pair for a wallet address from memory
@@ -49,7 +49,7 @@ Clear the key pair for a wallet address from memory
> **exportPublicKey**: (`walletAddress`: `string`) => `Promise`<`string`>
-Defined in: [src/react/useEncryption.ts:1155](https://github.com/anuma-ai/sdk/blob/main/src/react/useEncryption.ts#1155)
+Defined in: [src/react/useEncryption.ts:1354](https://github.com/anuma-ai/sdk/blob/main/src/react/useEncryption.ts#1354)
Export the public key for a wallet address as base64-encoded SPKI
@@ -88,7 +88,7 @@ Export the public key for a wallet address as base64-encoded SPKI
> **hasKeyPair**: (`walletAddress`: `string`) => `boolean`
-Defined in: [src/react/useEncryption.ts:1157](https://github.com/anuma-ai/sdk/blob/main/src/react/useEncryption.ts#1157)
+Defined in: [src/react/useEncryption.ts:1356](https://github.com/anuma-ai/sdk/blob/main/src/react/useEncryption.ts#1356)
Check if a key pair exists in memory for a wallet address
@@ -127,7 +127,7 @@ Check if a key pair exists in memory for a wallet address
> **requestEncryptionKey**: (`walletAddress`: `string`) => `Promise`<`void`>
-Defined in: [src/react/useEncryption.ts:1151](https://github.com/anuma-ai/sdk/blob/main/src/react/useEncryption.ts#1151)
+Defined in: [src/react/useEncryption.ts:1350](https://github.com/anuma-ai/sdk/blob/main/src/react/useEncryption.ts#1350)
Request and generate an encryption key for a wallet address
@@ -166,7 +166,7 @@ Request and generate an encryption key for a wallet address
> **requestKeyPair**: (`walletAddress`: `string`) => `Promise`<`void`>
-Defined in: [src/react/useEncryption.ts:1153](https://github.com/anuma-ai/sdk/blob/main/src/react/useEncryption.ts#1153)
+Defined in: [src/react/useEncryption.ts:1352](https://github.com/anuma-ai/sdk/blob/main/src/react/useEncryption.ts#1352)
Request and generate an ECDH key pair for a wallet address
diff --git a/src/content/sdk/react/Hooks/useChat.md b/src/content/sdk/react/Hooks/useChat.md
index 0ef587f5..1b2ae4be 100644
--- a/src/content/sdk/react/Hooks/useChat.md
+++ b/src/content/sdk/react/Hooks/useChat.md
@@ -246,6 +246,27 @@ Use for live preview of artifacts (HTML, slides) being generated.
+`options.preProcessors?`
+
+
+
+
+`PromptPreProcessor`\[]
+
+
+
+
+Pre-processors run after the last user message is received but before the
+first LLM request. Each receives the prompt text and a shared embedding
+(computed once per request) and may return messages to enrich the
+conversation. See `createWebSearchPreProcessor`, `createPricePreProcessor`,
+or write a custom one matching `PromptPreProcessor`.
+
+
+
+Tool set names that should expand unconditionally for this request,
+bypassing the anchor-similarity check. Use when conversation state
+implies a set should be present regardless of how the prompt is phrased
+— e.g., pass `["slides"]` when the conversation already contains a slide
+deck artifact, so short follow-up prompts ("add a thank you slide",
+"make it bigger") still get the full slide toolkit.
+
+Read via a ref so updates are visible to in-flight `sendMessage` calls
+without rebuilding the callback.
+
+Names must match a set's `name` from `BUILT_IN_TOOL_SETS` or
+`extraToolSets`. Unknown names are ignored.
+
+
+
+Additional tool sets to apply on top of the built-in ones (app-generation,
+slides, github). When any anchor tool in a custom set is selected by
+semantic matching, all members of that set are included automatically.
+
+Treated as static config — set once at hook setup. Changing it across
+renders does not affect in-flight `sendMessage` calls; use
+`activeToolSets` for dynamic, conversation-state-driven overrides.
+
+
+
+
+
+
`options.fileProcessingOptions?`
@@ -550,6 +601,28 @@ Use for live preview of artifacts (HTML, slides) being generated.
+`options.preProcessors?`
+
+
+
+
+`PromptPreProcessor`\[]
+
+
+
+
+Pre-processors run after the last user message is received but before
+the first LLM request. Each receives the prompt text and a shared
+embedding (computed once per request) and may return messages to
+enrich the conversation. Forwarded to the underlying `useChat` hook.
+See `createWebSearchPreProcessor`, `createPricePreProcessor`, or write
+a custom one matching `PromptPreProcessor`.
+
+
+
+**Returns**
+
+`AnumaJsxError`
+
+**Overrides**
+
+`Error.constructor`
+
+## Properties
+
+### column?
+
+> `readonly` `optional` **column**: `number`
+
+Defined in: [src/tools/slides/jsx.ts:71](https://github.com/anuma-ai/sdk/blob/main/src/tools/slides/jsx.ts#71)
+
+***
+
+### line?
+
+> `readonly` `optional` **line**: `number`
+
+Defined in: [src/tools/slides/jsx.ts:70](https://github.com/anuma-ai/sdk/blob/main/src/tools/slides/jsx.ts#70)
+
+***
+
+### message
+
+> **message**: `string`
+
+Defined in: node\_modules/.pnpm/typescript@5.9.3/node\_modules/typescript/lib/lib.es5.d.ts:1077
+
+**Inherited from**
+
+`Error.message`
+
+***
+
+### name
+
+> **name**: `string`
+
+Defined in: node\_modules/.pnpm/typescript@5.9.3/node\_modules/typescript/lib/lib.es5.d.ts:1076
+
+**Inherited from**
+
+`Error.name`
+
+***
+
+### stack?
+
+> `optional` **stack**: `string`
+
+Defined in: node\_modules/.pnpm/typescript@5.9.3/node\_modules/typescript/lib/lib.es5.d.ts:1078
+
+**Inherited from**
+
+`Error.stack`
+
+***
+
+### stackTraceLimit
+
+> `static` **stackTraceLimit**: `number`
+
+Defined in: node\_modules/.pnpm/@types+node@25.0.3/node\_modules/@types/node/globals.d.ts:67
+
+The `Error.stackTraceLimit` property specifies the number of stack frames
+collected by a stack trace (whether generated by `new Error().stack` or
+`Error.captureStackTrace(obj)`).
+
+The default value is `10` but may be set to any valid JavaScript number. Changes
+will affect any stack trace captured *after* the value has been changed.
+
+If set to a non-number value, or set to a negative number, stack traces will
+not capture any frames.
+
+**Inherited from**
+
+`Error.stackTraceLimit`
+
+## Methods
+
+### captureStackTrace()
+
+> `static` **captureStackTrace**(`targetObject`: `object`, `constructorOpt?`: `Function`): `void`
+
+Defined in: node\_modules/.pnpm/@types+node@25.0.3/node\_modules/@types/node/globals.d.ts:51
+
+Creates a `.stack` property on `targetObject`, which when accessed returns
+a string representing the location in the code at which
+`Error.captureStackTrace()` was called.
+
+```js
+const myObject = {};
+Error.captureStackTrace(myObject);
+myObject.stack; // Similar to `new Error().stack`
+```
+
+The first line of the trace will be prefixed with
+`${myObject.name}: ${myObject.message}`.
+
+The optional `constructorOpt` argument accepts a function. If given, all frames
+above `constructorOpt`, including `constructorOpt`, will be omitted from the
+generated stack trace.
+
+The `constructorOpt` argument is useful for hiding implementation
+details of error generation from the user. For instance:
+
+```js
+function a() {
+ b();
+}
+
+function b() {
+ c();
+}
+
+function c() {
+ // Create an error without stack trace to avoid calculating the stack trace twice.
+ const { stackTraceLimit } = Error;
+ Error.stackTraceLimit = 0;
+ const error = new Error();
+ Error.stackTraceLimit = stackTraceLimit;
+
+ // Capture the stack trace above function b
+ Error.captureStackTrace(error, b); // Neither function c, nor b is included in the stack trace
+ throw error;
+}
+
+a();
+```
+
+**Parameters**
+
+
@@ -67,7 +67,7 @@ The matching processor, or null if none found
> **getAll**(): [`FileProcessor`](../interfaces/FileProcessor.md)\[]
-Defined in: [src/lib/processors/registry.ts:48](https://github.com/anuma-ai/sdk/blob/main/src/lib/processors/registry.ts#48)
+Defined in: [src/lib/processors/registry.ts:97](https://github.com/anuma-ai/sdk/blob/main/src/lib/processors/registry.ts#97)
Get all registered processors
@@ -77,11 +77,85 @@ Get all registered processors
***
+### getSupportedExtensions()
+
+> **getSupportedExtensions**(): `string`\[]
+
+Defined in: [src/lib/processors/registry.ts:84](https://github.com/anuma-ai/sdk/blob/main/src/lib/processors/registry.ts#84)
+
+Get the union of all file extensions handled by registered processors.
+Includes the leading dot (e.g. `.md`, `.pdf`) so values can be passed
+directly to an `` attribute.
+Result is deduplicated and sorted for stable output.
+
+**Returns**
+
+`string`\[]
+
+***
+
+### getSupportedMimeTypes()
+
+> **getSupportedMimeTypes**(): `string`\[]
+
+Defined in: [src/lib/processors/registry.ts:68](https://github.com/anuma-ai/sdk/blob/main/src/lib/processors/registry.ts#68)
+
+Get the union of all MIME types handled by registered processors.
+Useful for building an `` allowlist.
+Result is deduplicated and sorted for stable output.
+
+**Returns**
+
+`string`\[]
+
+***
+
+### isSupported()
+
+> **isSupported**(`file`: [`FileTypeQuery`](../interfaces/FileTypeQuery.md)): `boolean`
+
+Defined in: [src/lib/processors/registry.ts:59](https://github.com/anuma-ai/sdk/blob/main/src/lib/processors/registry.ts#59)
+
+Test whether any registered processor can handle the given file.
+Convenience wrapper around `findProcessor` for upload-time validation
+where you only care about the boolean answer.
+
+**Parameters**
+
+
+
+**Returns**
+
+`boolean`
+
+***
+
### register()
> **register**(`processor`: [`FileProcessor`](../interfaces/FileProcessor.md)): `void`
-Defined in: [src/lib/processors/registry.ts:13](https://github.com/anuma-ai/sdk/blob/main/src/lib/processors/registry.ts#13)
+Defined in: [src/lib/processors/registry.ts:22](https://github.com/anuma-ai/sdk/blob/main/src/lib/processors/registry.ts#22)
Register a processor
diff --git a/src/content/sdk/react/Internal/classes/ProviderStreamError.md b/src/content/sdk/react/Internal/classes/ProviderStreamError.md
new file mode 100644
index 00000000..9e9367f2
--- /dev/null
+++ b/src/content/sdk/react/Internal/classes/ProviderStreamError.md
@@ -0,0 +1,285 @@
+# ProviderStreamError
+
+Defined in: [src/lib/chat/toolLoop.ts:98](https://github.com/anuma-ai/sdk/blob/main/src/lib/chat/toolLoop.ts#98)
+
+Error thrown when an upstream provider emits an in-stream error event.
+Carries the provider's code (e.g. `"timeout"`) so callers can match
+programmatically via `err instanceof ProviderStreamError && err.code === "timeout"`
+instead of string-matching the message.
+
+## Extends
+
+* `Error`
+
+## Constructors
+
+### Constructor
+
+> **new ProviderStreamError**(`message`: `string`, `code?`: `string`): `ProviderStreamError`
+
+Defined in: [src/lib/chat/toolLoop.ts:100](https://github.com/anuma-ai/sdk/blob/main/src/lib/chat/toolLoop.ts#100)
+
+**Parameters**
+
+
+
+
+
Parameter
+
Type
+
+
+
+
+
+
+`message`
+
+
+
+
+`string`
+
+
+
+
+
+
+`code?`
+
+
+
+
+`string`
+
+
+
+
+
+
+**Returns**
+
+`ProviderStreamError`
+
+**Overrides**
+
+`Error.constructor`
+
+## Properties
+
+### code
+
+> `readonly` **code**: `string` | `undefined`
+
+Defined in: [src/lib/chat/toolLoop.ts:99](https://github.com/anuma-ai/sdk/blob/main/src/lib/chat/toolLoop.ts#99)
+
+***
+
+### message
+
+> **message**: `string`
+
+Defined in: node\_modules/.pnpm/typescript@5.9.3/node\_modules/typescript/lib/lib.es5.d.ts:1077
+
+**Inherited from**
+
+`Error.message`
+
+***
+
+### name
+
+> **name**: `string`
+
+Defined in: node\_modules/.pnpm/typescript@5.9.3/node\_modules/typescript/lib/lib.es5.d.ts:1076
+
+**Inherited from**
+
+`Error.name`
+
+***
+
+### stack?
+
+> `optional` **stack**: `string`
+
+Defined in: node\_modules/.pnpm/typescript@5.9.3/node\_modules/typescript/lib/lib.es5.d.ts:1078
+
+**Inherited from**
+
+`Error.stack`
+
+***
+
+### stackTraceLimit
+
+> `static` **stackTraceLimit**: `number`
+
+Defined in: node\_modules/.pnpm/@types+node@25.0.3/node\_modules/@types/node/globals.d.ts:67
+
+The `Error.stackTraceLimit` property specifies the number of stack frames
+collected by a stack trace (whether generated by `new Error().stack` or
+`Error.captureStackTrace(obj)`).
+
+The default value is `10` but may be set to any valid JavaScript number. Changes
+will affect any stack trace captured *after* the value has been changed.
+
+If set to a non-number value, or set to a negative number, stack traces will
+not capture any frames.
+
+**Inherited from**
+
+`Error.stackTraceLimit`
+
+## Methods
+
+### captureStackTrace()
+
+> `static` **captureStackTrace**(`targetObject`: `object`, `constructorOpt?`: `Function`): `void`
+
+Defined in: node\_modules/.pnpm/@types+node@25.0.3/node\_modules/@types/node/globals.d.ts:51
+
+Creates a `.stack` property on `targetObject`, which when accessed returns
+a string representing the location in the code at which
+`Error.captureStackTrace()` was called.
+
+```js
+const myObject = {};
+Error.captureStackTrace(myObject);
+myObject.stack; // Similar to `new Error().stack`
+```
+
+The first line of the trace will be prefixed with
+`${myObject.name}: ${myObject.message}`.
+
+The optional `constructorOpt` argument accepts a function. If given, all frames
+above `constructorOpt`, including `constructorOpt`, will be omitted from the
+generated stack trace.
+
+The `constructorOpt` argument is useful for hiding implementation
+details of error generation from the user. For instance:
+
+```js
+function a() {
+ b();
+}
+
+function b() {
+ c();
+}
+
+function c() {
+ // Create an error without stack trace to avoid calculating the stack trace twice.
+ const { stackTraceLimit } = Error;
+ Error.stackTraceLimit = 0;
+ const error = new Error();
+ Error.stackTraceLimit = stackTraceLimit;
+
+ // Capture the stack trace above function b
+ Error.captureStackTrace(error, b); // Neither function c, nor b is included in the stack trace
+ throw error;
+}
+
+a();
+```
+
+**Parameters**
+
+
+
+**Returns**
+
+`Promise`<[`ProcessedFileResult`](../interfaces/ProcessedFileResult.md) | `null`>
+
+Extracted text content and metadata, or null if processing fails/not applicable
+
+**Implementation of**
+
+[`FileProcessor`](../interfaces/FileProcessor.md).[`process`](../interfaces/FileProcessor.md#process)
diff --git a/src/content/sdk/react/Internal/classes/WatermelonChatStorageAdapter.md b/src/content/sdk/react/Internal/classes/WatermelonChatStorageAdapter.md
new file mode 100644
index 00000000..82f0fb5c
--- /dev/null
+++ b/src/content/sdk/react/Internal/classes/WatermelonChatStorageAdapter.md
@@ -0,0 +1,849 @@
+# WatermelonChatStorageAdapter
+
+Defined in: [src/lib/storage/WatermelonChatStorageAdapter.ts:69](https://github.com/anuma-ai/sdk/blob/main/src/lib/storage/WatermelonChatStorageAdapter.ts#69)
+
+Backend-agnostic interface for chat/conversation storage.
+
+The method set mirrors the operations we actually use across the SDK:
+`*Op` functions in `src/lib/db/chat/operations.ts` plus the `observe*`
+patterns used by react hooks. Targeted updates (e.g., `updateMessageError`)
+are exposed as separate methods rather than a generic `update()` because
+several of them have special semantics (encryption bypass for embeddings,
+unique constraints on feedback, etc).
+
+## Implements
+
+* [`ChatStorageAdapter`](../interfaces/ChatStorageAdapter.md)
+
+## Constructors
+
+### Constructor
+
+> **new WatermelonChatStorageAdapter**(`options`: [`WatermelonChatStorageAdapterOptions`](../interfaces/WatermelonChatStorageAdapterOptions.md)): `WatermelonChatStorageAdapter`
+
+Defined in: [src/lib/storage/WatermelonChatStorageAdapter.ts:74](https://github.com/anuma-ai/sdk/blob/main/src/lib/storage/WatermelonChatStorageAdapter.ts#74)
+
+**Parameters**
+
+
diff --git a/src/content/sdk/react/Internal/functions/clearAllEncryptionKeys.md b/src/content/sdk/react/Internal/functions/clearAllEncryptionKeys.md
index c02f60be..1d65c793 100644
--- a/src/content/sdk/react/Internal/functions/clearAllEncryptionKeys.md
+++ b/src/content/sdk/react/Internal/functions/clearAllEncryptionKeys.md
@@ -1,11 +1,18 @@
-# clearAllEncryptionKeys
+# ~~clearAllEncryptionKeys()~~
> **clearAllEncryptionKeys**(): `void`
-Defined in: [src/react/useEncryption.ts:145](https://github.com/anuma-ai/sdk/blob/main/src/react/useEncryption.ts#145)
+Defined in: [src/react/useEncryption.ts:256](https://github.com/anuma-ai/sdk/blob/main/src/react/useEncryption.ts#256)
-Clears all encryption keys from memory
+Clears all encryption keys from memory.
## Returns
`void`
+
+## Deprecated
+
+Use [clearAllEncryptionState](clearAllEncryptionState.md) instead. This function is kept
+as an alias for backwards compatibility and now delegates to the canonical
+teardown, which additionally clears `keyAvailableCallbacks`, pending key
+requests, and derived ECDH key pairs (both in-memory and persisted).
diff --git a/src/content/sdk/react/Internal/functions/clearAllEncryptionState.md b/src/content/sdk/react/Internal/functions/clearAllEncryptionState.md
new file mode 100644
index 00000000..cff67368
--- /dev/null
+++ b/src/content/sdk/react/Internal/functions/clearAllEncryptionState.md
@@ -0,0 +1,32 @@
+# clearAllEncryptionState
+
+> **clearAllEncryptionState**(): `void`
+
+Defined in: [src/react/useEncryption.ts:223](https://github.com/anuma-ai/sdk/blob/main/src/react/useEncryption.ts#223)
+
+Clears all encryption-related state from memory and any derived persistence.
+
+This is the canonical session-teardown entry point. It wipes every module-level
+map that retains key material or listeners tied to a session: the raw
+encryption keys, cached imported CryptoKey objects, availability callbacks,
+pending sign-in flights, and derived ECDH key pairs. It also removes any
+persisted ECDH key pairs from localStorage so they can't be decrypted by a
+subsequent user on a shared browser.
+
+Call this on logout / session-end to prevent cross-user key leakage on shared
+browsers. If you manage auth outside the SDK, wire this into your logout flow.
+
+## Returns
+
+`void`
+
+## Example
+
+```tsx
+import { clearAllEncryptionState } from "@anuma/sdk/react";
+
+async function handleLogout() {
+ clearAllEncryptionState();
+ await privy.logout();
+}
+```
diff --git a/src/content/sdk/react/Internal/functions/clearAllKeyPairs.md b/src/content/sdk/react/Internal/functions/clearAllKeyPairs.md
index c9734e4f..6689f388 100644
--- a/src/content/sdk/react/Internal/functions/clearAllKeyPairs.md
+++ b/src/content/sdk/react/Internal/functions/clearAllKeyPairs.md
@@ -2,9 +2,13 @@
> **clearAllKeyPairs**(): `void`
-Defined in: [src/react/useEncryption.ts:1141](https://github.com/anuma-ai/sdk/blob/main/src/react/useEncryption.ts#1141)
+Defined in: [src/react/useEncryption.ts:1319](https://github.com/anuma-ai/sdk/blob/main/src/react/useEncryption.ts#1319)
-Clears all key pairs from memory
+Clears all key pairs from memory and any persisted entries in localStorage.
+
+Matches the persistence behavior of the per-address [clearKeyPair](clearKeyPair.md);
+without this, `clearAllKeyPairs()` would leave `ecdh_keypair_*` ciphertext
+behind in storage while `clearKeyPair(address)` removes it.
## Returns
diff --git a/src/content/sdk/react/Internal/functions/clearEncryptionKey.md b/src/content/sdk/react/Internal/functions/clearEncryptionKey.md
index 7b3ee69c..9b9f8d12 100644
--- a/src/content/sdk/react/Internal/functions/clearEncryptionKey.md
+++ b/src/content/sdk/react/Internal/functions/clearEncryptionKey.md
@@ -2,7 +2,7 @@
> **clearEncryptionKey**(`address`: `string`): `void`
-Defined in: [src/react/useEncryption.ts:136](https://github.com/anuma-ai/sdk/blob/main/src/react/useEncryption.ts#136)
+Defined in: [src/react/useEncryption.ts:194](https://github.com/anuma-ai/sdk/blob/main/src/react/useEncryption.ts#194)
Clears the encryption key for a wallet address from memory
diff --git a/src/content/sdk/react/Internal/functions/clearKeyPair.md b/src/content/sdk/react/Internal/functions/clearKeyPair.md
index 5c236bdf..e6457c66 100644
--- a/src/content/sdk/react/Internal/functions/clearKeyPair.md
+++ b/src/content/sdk/react/Internal/functions/clearKeyPair.md
@@ -2,7 +2,7 @@
> **clearKeyPair**(`address`: `string`): `void`
-Defined in: [src/react/useEncryption.ts:1133](https://github.com/anuma-ai/sdk/blob/main/src/react/useEncryption.ts#1133)
+Defined in: [src/react/useEncryption.ts:1307](https://github.com/anuma-ai/sdk/blob/main/src/react/useEncryption.ts#1307)
Clears the key pair for a wallet address from memory and localStorage
diff --git a/src/content/sdk/react/Internal/functions/clearLazyTitleCache.md b/src/content/sdk/react/Internal/functions/clearLazyTitleCache.md
new file mode 100644
index 00000000..1942cf1a
--- /dev/null
+++ b/src/content/sdk/react/Internal/functions/clearLazyTitleCache.md
@@ -0,0 +1,16 @@
+# clearLazyTitleCache
+
+> **clearLazyTitleCache**(): `void`
+
+Defined in: [src/lib/db/chat/lazyDecrypt.ts:100](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/lazyDecrypt.ts#100)
+
+Drop every cached plaintext title and pending decrypt promise.
+
+Wired into `clearAllEncryptionState()` via the listener registry in
+`useEncryption.ts`. Also exported so consumers can clear the cache
+proactively (e.g. on wallet switch within a session before the
+full encryption-state teardown lands).
+
+## Returns
+
+`void`
diff --git a/src/content/sdk/react/Internal/functions/cosineInt8.md b/src/content/sdk/react/Internal/functions/cosineInt8.md
new file mode 100644
index 00000000..99826d46
--- /dev/null
+++ b/src/content/sdk/react/Internal/functions/cosineInt8.md
@@ -0,0 +1,103 @@
+# cosineInt8
+
+> **cosineInt8**(`a`: `Int8Array`, `scaleA`: `number`, `b`: `Int8Array`, `scaleB`: `number`): `number`
+
+Defined in: [src/lib/memoryEngine/quantization.ts:119](https://github.com/anuma-ai/sdk/blob/main/src/lib/memoryEngine/quantization.ts#119)
+
+Cosine similarity between two Int8-quantized embeddings.
+
+The integer dot product is exact; the per-vector scales cancel
+because cosine normalizes by both magnitudes — passing scaleA and
+scaleB is supported for symmetry with the dequantized API but they
+are mathematically irrelevant when both vectors share the same
+quantization scheme. They are still validated to catch zero-magnitude
+(zero-vector) inputs cleanly.
+
+Returns 0 when either vector is zero or dimensions differ. Result is
+clamped to \[-1, 1] to absorb floating-point error from sqrt.
+
+## Parameters
+
+
+
+
+
Parameter
+
Type
+
Description
+
+
+
+
+
+
+`a`
+
+
+
+
+`Int8Array`
+
+
+
+
+First quantized vector.
+
+
+
+
+
+
+`scaleA`
+
+
+
+
+`number`
+
+
+
+
+Scale factor for `a`. Used only to detect zero vectors.
+
+
+
+
+
+
+`b`
+
+
+
+
+`Int8Array`
+
+
+
+
+Second quantized vector.
+
+
+
+
+
+
+`scaleB`
+
+
+
+
+`number`
+
+
+
+
+Scale factor for `b`. Used only to detect zero vectors.
+
+
+
+
+
+
+## Returns
+
+`number`
diff --git a/src/content/sdk/react/Internal/functions/createServerToolsFilter.md b/src/content/sdk/react/Internal/functions/createServerToolsFilter.md
new file mode 100644
index 00000000..9335c047
--- /dev/null
+++ b/src/content/sdk/react/Internal/functions/createServerToolsFilter.md
@@ -0,0 +1,98 @@
+# createServerToolsFilter
+
+> **createServerToolsFilter**(`options`: [`CreateServerToolsFilterOptions`](../interfaces/CreateServerToolsFilterOptions.md)): (`embeddings`: `number`\[] | `number`\[]\[], `tools`: [`ServerTool`](../interfaces/ServerTool.md)\[]) => `string`\[]
+
+Defined in: [src/lib/tools/serverTools.ts:1039](https://github.com/anuma-ai/sdk/blob/main/src/lib/tools/serverTools.ts#1039)
+
+Build a server-tools filter function for use with `useChatStorage`'s
+`serverTools` option. Composes `findMatchingTools`, `expandToolSetsAdditive`,
+and an exclude-list into a single (embeddings, tools) → string\[] callback.
+
+## Parameters
+
+
+
+### Returns
+
+`string`\[]
+
+## Example
+
+```ts
+import { createServerToolsFilter } from "@anuma/sdk/tools";
+
+const serverTools = createServerToolsFilter({
+ toolSets: [
+ {
+ name: "fal",
+ members: ["AnumaFalMCP-fal_run", "AnumaFalMCP-fal_queue_submit", ...],
+ anchors: ["AnumaFalMCP-fal_run", "AnumaFalMCP-fal_queue_submit", ...],
+ anchorMinSimilarity: 0.7,
+ },
+ ],
+ excludeTools: ["AnumaFalMCP-fal_billing"],
+ matchOptions: { limit: 5, minSimilarity: 0.5 },
+});
+```
diff --git a/src/content/sdk/react/Internal/functions/decryptConversationTitle.md b/src/content/sdk/react/Internal/functions/decryptConversationTitle.md
new file mode 100644
index 00000000..e10db15a
--- /dev/null
+++ b/src/content/sdk/react/Internal/functions/decryptConversationTitle.md
@@ -0,0 +1,82 @@
+# decryptConversationTitle
+
+> **decryptConversationTitle**(`encryptedTitle`: `string`, `address`: `string`): `Promise`<`string`>
+
+Defined in: [src/lib/db/chat/lazyDecrypt.ts:148](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/lazyDecrypt.ts#148)
+
+Decrypt a single conversation title on demand.
+
+Designed for the lazy display path: pair with `listConversationsLazy`
+and call this once a row is actually visible.
+
+Behavior:
+
+* Plaintext input (no `enc:` prefix) is returned unchanged. This
+ covers conversations created before encryption was enabled and
+ keeps the helper safe to call unconditionally from rendering
+ code that may receive a mix of encrypted and plaintext titles.
+* Encrypted input is decrypted via `decryptField`, which uses the
+ same per-version cached `CryptoKey` as the eager path — no new
+ key derivations are triggered.
+* Concurrent calls for the same `(address, encryptedTitle)` share
+ a single decrypt promise.
+* The result is memoized in a 256-entry LRU.
+
+Throws if the encryption key for `address` isn't loaded. (The
+underlying `decryptField` would otherwise silently return the
+ciphertext, which would surface to the UI as a literal `enc:v3:...`
+title — strictly worse than a thrown error the caller can catch.)
+
+## Parameters
+
+
+
+
+
Parameter
+
Type
+
Description
+
+
+
+
+
+
+`encryptedTitle`
+
+
+
+
+`string`
+
+
+
+
+The stored title. May be ciphertext or plaintext.
+
+
+
+
+
+
+`address`
+
+
+
+
+`string`
+
+
+
+
+Wallet address that owns the encryption key.
+
+
+
+
+
+
+## Returns
+
+`Promise`<`string`>
+
+The decrypted plaintext title.
diff --git a/src/content/sdk/react/Internal/functions/decryptDataBytes.md b/src/content/sdk/react/Internal/functions/decryptDataBytes.md
index 2a289141..65703e7b 100644
--- a/src/content/sdk/react/Internal/functions/decryptDataBytes.md
+++ b/src/content/sdk/react/Internal/functions/decryptDataBytes.md
@@ -2,7 +2,7 @@
> **decryptDataBytes**(`encryptedHex`: `string`, `address`: `string`, `version`: `EncryptionKeyVersion`): `Promise`<`Uint8Array`<`ArrayBufferLike`>>
-Defined in: [src/react/useEncryption.ts:520](https://github.com/anuma-ai/sdk/blob/main/src/react/useEncryption.ts#520)
+Defined in: [src/react/useEncryption.ts:641](https://github.com/anuma-ai/sdk/blob/main/src/react/useEncryption.ts#641)
Decrypts data and returns as Uint8Array (for binary data)
diff --git a/src/content/sdk/react/Internal/functions/decryptDataWithKey.md b/src/content/sdk/react/Internal/functions/decryptDataWithKey.md
index 5384a444..a3d97c2f 100644
--- a/src/content/sdk/react/Internal/functions/decryptDataWithKey.md
+++ b/src/content/sdk/react/Internal/functions/decryptDataWithKey.md
@@ -2,7 +2,7 @@
> **decryptDataWithKey**(`encryptedHex`: `string`, `key`: `CryptoKey`): `Promise`<`string`>
-Defined in: [src/react/useEncryption.ts:603](https://github.com/anuma-ai/sdk/blob/main/src/react/useEncryption.ts#603)
+Defined in: [src/react/useEncryption.ts:730](https://github.com/anuma-ai/sdk/blob/main/src/react/useEncryption.ts#730)
**`Internal`**
diff --git a/src/content/sdk/react/Internal/functions/deleteAllAppFilesOp.md b/src/content/sdk/react/Internal/functions/deleteAllAppFilesOp.md
index f3ed5c85..f7c2c039 100644
--- a/src/content/sdk/react/Internal/functions/deleteAllAppFilesOp.md
+++ b/src/content/sdk/react/Internal/functions/deleteAllAppFilesOp.md
@@ -2,7 +2,7 @@
> **deleteAllAppFilesOp**(`ctx`: [`AppFileOperationsContext`](../interfaces/AppFileOperationsContext.md), `conversationId`: `string`): `Promise`<`void`>
-Defined in: [src/lib/db/appFiles/operations.ts:135](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/appFiles/operations.ts#135)
+Defined in: [src/lib/db/appFiles/operations.ts:122](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/appFiles/operations.ts#122)
Delete all files for a conversation.
diff --git a/src/content/sdk/react/Internal/functions/deleteAppFileOp.md b/src/content/sdk/react/Internal/functions/deleteAppFileOp.md
index d85fe97c..08bcb9dc 100644
--- a/src/content/sdk/react/Internal/functions/deleteAppFileOp.md
+++ b/src/content/sdk/react/Internal/functions/deleteAppFileOp.md
@@ -2,7 +2,7 @@
> **deleteAppFileOp**(`ctx`: [`AppFileOperationsContext`](../interfaces/AppFileOperationsContext.md), `conversationId`: `string`, `path`: `string`): `Promise`<`boolean`>
-Defined in: [src/lib/db/appFiles/operations.ts:115](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/appFiles/operations.ts#115)
+Defined in: [src/lib/db/appFiles/operations.ts:102](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/appFiles/operations.ts#102)
Delete a single file by conversationId and path.
diff --git a/src/content/sdk/react/Internal/functions/dequantizeEmbedding.md b/src/content/sdk/react/Internal/functions/dequantizeEmbedding.md
new file mode 100644
index 00000000..c10aa90c
--- /dev/null
+++ b/src/content/sdk/react/Internal/functions/dequantizeEmbedding.md
@@ -0,0 +1,38 @@
+# dequantizeEmbedding
+
+> **dequantizeEmbedding**(`__namedParameters`: [`QuantizedEmbedding`](../interfaces/QuantizedEmbedding.md)): `Float32Array`
+
+Defined in: [src/lib/memoryEngine/quantization.ts:89](https://github.com/anuma-ai/sdk/blob/main/src/lib/memoryEngine/quantization.ts#89)
+
+Dequantize an Int8 embedding back into Float32.
+
+Inverse of [quantizeEmbedding](quantizeEmbedding.md) up to ~1/127 quantization error.
+
+## Parameters
+
+
diff --git a/src/content/sdk/react/Internal/functions/encryptDataWithKey.md b/src/content/sdk/react/Internal/functions/encryptDataWithKey.md
index 58d6c284..7de706d7 100644
--- a/src/content/sdk/react/Internal/functions/encryptDataWithKey.md
+++ b/src/content/sdk/react/Internal/functions/encryptDataWithKey.md
@@ -2,7 +2,7 @@
> **encryptDataWithKey**(`plaintext`: `string` | `Uint8Array`<`ArrayBufferLike`>, `key`: `CryptoKey`): `Promise`<`string`>
-Defined in: [src/react/useEncryption.ts:563](https://github.com/anuma-ai/sdk/blob/main/src/react/useEncryption.ts#563)
+Defined in: [src/react/useEncryption.ts:690](https://github.com/anuma-ai/sdk/blob/main/src/react/useEncryption.ts#690)
**`Internal`**
diff --git a/src/content/sdk/react/Internal/functions/expandToolSetsAdditive.md b/src/content/sdk/react/Internal/functions/expandToolSetsAdditive.md
new file mode 100644
index 00000000..8974c0c4
--- /dev/null
+++ b/src/content/sdk/react/Internal/functions/expandToolSetsAdditive.md
@@ -0,0 +1,133 @@
+# expandToolSetsAdditive
+
+> **expandToolSetsAdditive**(`matchedNames`: `Set`<`string`>, `availableNames`: `Set`<`string`>, `scores`: `Map`<`string`, `number`>, `toolSets`: [`ToolSet`](../interfaces/ToolSet.md)\[], `activeSetNames?`: `ReadonlySet`<`string`>): `Set`<`string`>
+
+Defined in: [src/lib/tools/serverTools.ts:976](https://github.com/anuma-ai/sdk/blob/main/src/lib/tools/serverTools.ts#976)
+
+Additively expand tool sets: when any anchor of a set scores at or above
+its `anchorMinSimilarity`, all set members are added to the result.
+Original matches are preserved; multiple sets can expand independently.
+
+Members of sets that *don't* activate are kept if they were individually
+matched. We deliberately don't strip orphans: the cost of a single
+borderline tool slipping into the request is cheap (a few extra bytes,
+no behavioral impact) but stripping legitimate matches like
+`create_file 0.55` on prompts where `patch_file` doesn't also clear the
+anchor threshold would silently break app-creation flows. Recall over
+precision.
+
+Use this for server-side toolkit suites where the LLM needs the full
+call chain (e.g. fal\_list\_models → fal\_model\_schema → fal\_queue\_submit →
+fal\_queue\_status → fal\_queue\_result). Differs from `applyToolSets`, which
+replaces non-set matches when a set activates.
+
+To express "any member triggers the set" (not specific anchors), pass
+`anchors: members` when defining the ToolSet.
+
+## Parameters
+
+
+
+
+
Parameter
+
Type
+
Description
+
+
+
+
+
+
+`matchedNames`
+
+
+
+
+`Set`<`string`>
+
+
+
+
+Names selected by semantic matching
+
+
+
+
+
+
+`availableNames`
+
+
+
+
+`Set`<`string`>
+
+
+
+
+All tool names available for selection
+
+
+
+
+
+
+`scores`
+
+
+
+
+`Map`<`string`, `number`>
+
+
+
+
+Map of tool name → similarity score
+
+
+
+
+
+
+`toolSets`
+
+
+
+
+[`ToolSet`](../interfaces/ToolSet.md)\[]
+
+
+
+
+Tool sets to evaluate
+
+
+
+
+
+
+`activeSetNames?`
+
+
+
+
+`ReadonlySet`<`string`>
+
+
+
+
+Set names that should expand unconditionally,
+bypassing the anchor-similarity check. Use this when conversation state
+implies a set should be present regardless of how the current prompt is
+phrased (e.g., a slide deck artifact already exists in the conversation).
+
+
+
+
+
+
+## Returns
+
+`Set`<`string`>
+
+Set including original matches plus members of any activated set
diff --git a/src/content/sdk/react/Internal/functions/exportPublicKey.md b/src/content/sdk/react/Internal/functions/exportPublicKey.md
index 5e6409a9..b3120343 100644
--- a/src/content/sdk/react/Internal/functions/exportPublicKey.md
+++ b/src/content/sdk/react/Internal/functions/exportPublicKey.md
@@ -2,7 +2,7 @@
> **exportPublicKey**(`address`: `string`, `signMessage`: [`SignMessageFn`](../type-aliases/SignMessageFn.md), `embeddedWalletSigner?`: [`EmbeddedWalletSignerFn`](../type-aliases/EmbeddedWalletSignerFn.md)): `Promise`<`string`>
-Defined in: [src/react/useEncryption.ts:1105](https://github.com/anuma-ai/sdk/blob/main/src/react/useEncryption.ts#1105)
+Defined in: [src/react/useEncryption.ts:1279](https://github.com/anuma-ai/sdk/blob/main/src/react/useEncryption.ts#1279)
Exports the public key for a wallet address as SPKI format (base64)
diff --git a/src/content/sdk/react/Internal/functions/findById.md b/src/content/sdk/react/Internal/functions/findById.md
new file mode 100644
index 00000000..a5f2966b
--- /dev/null
+++ b/src/content/sdk/react/Internal/functions/findById.md
@@ -0,0 +1,48 @@
+# findById
+
+> **findById**(`root`: [`AnumaNode`](../interfaces/AnumaNode.md), `id`: `string`): [`AnumaNode`](../interfaces/AnumaNode.md) | `null`
+
+Defined in: [src/tools/slides/jsx.ts:744](https://github.com/anuma-ai/sdk/blob/main/src/tools/slides/jsx.ts#744)
+
+Find the first node whose `attrs.id` matches `id`.
+
+## Parameters
+
+
+
+
+
Parameter
+
Type
+
+
+
+
+
+
+`root`
+
+
+
+
+[`AnumaNode`](../interfaces/AnumaNode.md)
+
+
+
+
+
+
+`id`
+
+
+
+
+`string`
+
+
+
+
+
+
+## Returns
+
+[`AnumaNode`](../interfaces/AnumaNode.md) | `null`
diff --git a/src/content/sdk/react/Internal/functions/findParentOfId.md b/src/content/sdk/react/Internal/functions/findParentOfId.md
new file mode 100644
index 00000000..edfec306
--- /dev/null
+++ b/src/content/sdk/react/Internal/functions/findParentOfId.md
@@ -0,0 +1,48 @@
+# findParentOfId
+
+> **findParentOfId**(`root`: [`AnumaNode`](../interfaces/AnumaNode.md), `id`: `string`): [`AnumaNode`](../interfaces/AnumaNode.md) | `null`
+
+Defined in: [src/tools/slides/jsx.ts:757](https://github.com/anuma-ai/sdk/blob/main/src/tools/slides/jsx.ts#757)
+
+Find the parent of the node with matching id (null if root or missing).
+
+## Parameters
+
+
+
+
+
Parameter
+
Type
+
+
+
+
+
+
+`root`
+
+
+
+
+[`AnumaNode`](../interfaces/AnumaNode.md)
+
+
+
+
+
+
+`id`
+
+
+
+
+`string`
+
+
+
+
+
+
+## Returns
+
+[`AnumaNode`](../interfaces/AnumaNode.md) | `null`
diff --git a/src/content/sdk/react/Internal/functions/generateConversationId.md b/src/content/sdk/react/Internal/functions/generateConversationId.md
index f374da57..959b8f95 100644
--- a/src/content/sdk/react/Internal/functions/generateConversationId.md
+++ b/src/content/sdk/react/Internal/functions/generateConversationId.md
@@ -2,7 +2,7 @@
> **generateConversationId**(): `string`
-Defined in: [src/lib/db/chat/types.ts:730](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#730)
+Defined in: [src/lib/db/chat/types.ts:781](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#781)
## Returns
diff --git a/src/content/sdk/react/Internal/functions/getAppFileMapOp.md b/src/content/sdk/react/Internal/functions/getAppFileMapOp.md
index c505ee66..d37bc492 100644
--- a/src/content/sdk/react/Internal/functions/getAppFileMapOp.md
+++ b/src/content/sdk/react/Internal/functions/getAppFileMapOp.md
@@ -2,7 +2,7 @@
> **getAppFileMapOp**(`ctx`: [`AppFileOperationsContext`](../interfaces/AppFileOperationsContext.md), `conversationId`: `string`): `Promise`<`Record`<`string`, `string`>>
-Defined in: [src/lib/db/appFiles/operations.ts:104](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/appFiles/operations.ts#104)
+Defined in: [src/lib/db/appFiles/operations.ts:91](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/appFiles/operations.ts#91)
Get all files for a conversation as a path → content map (for sending to the runner).
diff --git a/src/content/sdk/react/Internal/functions/getAppFileOp.md b/src/content/sdk/react/Internal/functions/getAppFileOp.md
index 9d99e4df..9776fbc0 100644
--- a/src/content/sdk/react/Internal/functions/getAppFileOp.md
+++ b/src/content/sdk/react/Internal/functions/getAppFileOp.md
@@ -2,7 +2,7 @@
> **getAppFileOp**(`ctx`: [`AppFileOperationsContext`](../interfaces/AppFileOperationsContext.md), `conversationId`: `string`, `path`: `string`): `Promise`<[`StoredAppFile`](../interfaces/StoredAppFile.md) | `null`>
-Defined in: [src/lib/db/appFiles/operations.ts:78](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/appFiles/operations.ts#78)
+Defined in: [src/lib/db/appFiles/operations.ts:65](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/appFiles/operations.ts#65)
Read a single file by conversationId and path. Returns null if not found.
diff --git a/src/content/sdk/react/Internal/functions/getAppFilesOp.md b/src/content/sdk/react/Internal/functions/getAppFilesOp.md
index 186b1566..5ad4e55d 100644
--- a/src/content/sdk/react/Internal/functions/getAppFilesOp.md
+++ b/src/content/sdk/react/Internal/functions/getAppFilesOp.md
@@ -2,7 +2,7 @@
> **getAppFilesOp**(`ctx`: [`AppFileOperationsContext`](../interfaces/AppFileOperationsContext.md), `conversationId`: `string`): `Promise`<[`StoredAppFile`](../interfaces/StoredAppFile.md)\[]>
-Defined in: [src/lib/db/appFiles/operations.ts:92](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/appFiles/operations.ts#92)
+Defined in: [src/lib/db/appFiles/operations.ts:79](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/appFiles/operations.ts#79)
List all files for a conversation.
diff --git a/src/content/sdk/react/Internal/functions/getConversationsByProjectLazyOp.md b/src/content/sdk/react/Internal/functions/getConversationsByProjectLazyOp.md
new file mode 100644
index 00000000..6568b140
--- /dev/null
+++ b/src/content/sdk/react/Internal/functions/getConversationsByProjectLazyOp.md
@@ -0,0 +1,52 @@
+# getConversationsByProjectLazyOp
+
+> **getConversationsByProjectLazyOp**(`ctx`: [`StorageOperationsContext`](../interfaces/StorageOperationsContext.md), `projectId`: `string` | `null`): `Promise`<[`LazyStoredConversation`](../interfaces/LazyStoredConversation.md)\[]>
+
+Defined in: [src/lib/db/chat/operations.ts:278](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/operations.ts#278)
+
+Lazy variant of [getConversationsByProjectOp](getConversationsByProjectOp.md).
+
+Same encrypted-title projection as [getConversationsLazyOp](getConversationsLazyOp.md),
+filtered by project assignment. Pass `null` to retrieve conversations
+with no project.
+
+## Parameters
+
+
+
+## Returns
+
+`Promise`<[`LazyStoredConversation`](../interfaces/LazyStoredConversation.md)\[]>
diff --git a/src/content/sdk/react/Internal/functions/getConversationsByProjectOp.md b/src/content/sdk/react/Internal/functions/getConversationsByProjectOp.md
index 647eb75c..51e5b7f3 100644
--- a/src/content/sdk/react/Internal/functions/getConversationsByProjectOp.md
+++ b/src/content/sdk/react/Internal/functions/getConversationsByProjectOp.md
@@ -2,7 +2,7 @@
> **getConversationsByProjectOp**(`ctx`: [`StorageOperationsContext`](../interfaces/StorageOperationsContext.md), `projectId`: `string` | `null`): `Promise`<[`StoredConversation`](../interfaces/StoredConversation.md)\[]>
-Defined in: [src/lib/db/chat/operations.ts:306](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/operations.ts#306)
+Defined in: [src/lib/db/chat/operations.ts:376](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/operations.ts#376)
Get conversations filtered by project ID.
Pass null to get conversations that don't belong to any project.
diff --git a/src/content/sdk/react/Internal/functions/getConversationsLazyOp.md b/src/content/sdk/react/Internal/functions/getConversationsLazyOp.md
new file mode 100644
index 00000000..81b93638
--- /dev/null
+++ b/src/content/sdk/react/Internal/functions/getConversationsLazyOp.md
@@ -0,0 +1,49 @@
+# getConversationsLazyOp
+
+> **getConversationsLazyOp**(`ctx`: [`StorageOperationsContext`](../interfaces/StorageOperationsContext.md)): `Promise`<[`LazyStoredConversation`](../interfaces/LazyStoredConversation.md)\[]>
+
+Defined in: [src/lib/db/chat/operations.ts:261](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/operations.ts#261)
+
+Lazy variant of getConversationsOp.
+
+Returns conversations with their raw stored title under
+`encryptedTitle` instead of a decrypted `title`. Callers should pair
+this with [decryptConversationTitle](decryptConversationTitle.md) (or the underlying
+`decryptField`) and decrypt only when a row is rendered.
+
+Behavior is identical to `getConversationsOp` except for the title
+projection — sort order, soft-delete filtering, and active-conversation
+scoping all match.
+
+Encryption context on `ctx` is intentionally ignored: this op never
+decrypts. That is also why the test for this op asserts call count
+for `decryptField` is exactly zero.
+
+## Parameters
+
+
+
+## Returns
+
+`string` | `undefined`
diff --git a/src/content/sdk/react/Internal/functions/getSupportedFileTypes.md b/src/content/sdk/react/Internal/functions/getSupportedFileTypes.md
new file mode 100644
index 00000000..13a99a7b
--- /dev/null
+++ b/src/content/sdk/react/Internal/functions/getSupportedFileTypes.md
@@ -0,0 +1,24 @@
+# getSupportedFileTypes
+
+> **getSupportedFileTypes**(): `object`
+
+Defined in: [src/lib/processors/preprocessor.ts:81](https://github.com/anuma-ai/sdk/blob/main/src/lib/processors/preprocessor.ts#81)
+
+Get the union of all MIME types and extensions handled by the SDK's
+default processors. Useful for building an ``
+allowlist.
+
+Note: does NOT include image MIME types — add `"image/*"` yourself if you
+want the file picker to also accept images. See `isSupportedFile` docs.
+
+## Returns
+
+`object`
+
+### extensions
+
+> **extensions**: `string`\[]
+
+### mimeTypes
+
+> **mimeTypes**: `string`\[]
diff --git a/src/content/sdk/react/Internal/functions/hasEncryptionKey.md b/src/content/sdk/react/Internal/functions/hasEncryptionKey.md
index bb3bedc4..a365e365 100644
--- a/src/content/sdk/react/Internal/functions/hasEncryptionKey.md
+++ b/src/content/sdk/react/Internal/functions/hasEncryptionKey.md
@@ -2,7 +2,7 @@
> **hasEncryptionKey**(`address`: `string`): `boolean`
-Defined in: [src/react/useEncryption.ts:550](https://github.com/anuma-ai/sdk/blob/main/src/react/useEncryption.ts#550)
+Defined in: [src/react/useEncryption.ts:677](https://github.com/anuma-ai/sdk/blob/main/src/react/useEncryption.ts#677)
Checks if an encryption key exists in memory for the given wallet address
diff --git a/src/content/sdk/react/Internal/functions/hasKeyPair.md b/src/content/sdk/react/Internal/functions/hasKeyPair.md
index ead050e7..98b6953d 100644
--- a/src/content/sdk/react/Internal/functions/hasKeyPair.md
+++ b/src/content/sdk/react/Internal/functions/hasKeyPair.md
@@ -2,7 +2,7 @@
> **hasKeyPair**(`address`: `string`): `boolean`
-Defined in: [src/react/useEncryption.ts:1125](https://github.com/anuma-ai/sdk/blob/main/src/react/useEncryption.ts#1125)
+Defined in: [src/react/useEncryption.ts:1299](https://github.com/anuma-ai/sdk/blob/main/src/react/useEncryption.ts#1299)
Checks if a key pair exists in memory for the given wallet address
diff --git a/src/content/sdk/react/Internal/functions/insertAfterId.md b/src/content/sdk/react/Internal/functions/insertAfterId.md
new file mode 100644
index 00000000..6416c99c
--- /dev/null
+++ b/src/content/sdk/react/Internal/functions/insertAfterId.md
@@ -0,0 +1,61 @@
+# insertAfterId
+
+> **insertAfterId**(`root`: [`AnumaNode`](../interfaces/AnumaNode.md), `afterId`: `string`, `node`: [`AnumaNode`](../interfaces/AnumaNode.md)): `boolean`
+
+Defined in: [src/tools/slides/jsx.ts:814](https://github.com/anuma-ai/sdk/blob/main/src/tools/slides/jsx.ts#814)
+
+Insert `node` immediately after the node with matching id anywhere in
+the tree. Returns true on success.
+
+## Parameters
+
+
+
+
+
Parameter
+
Type
+
+
+
+
+
+
+`root`
+
+
+
+
+[`AnumaNode`](../interfaces/AnumaNode.md)
+
+
+
+
+
+
+`afterId`
+
+
+
+
+`string`
+
+
+
+
+
+
+`node`
+
+
+
+
+[`AnumaNode`](../interfaces/AnumaNode.md)
+
+
+
+
+
+
+## Returns
+
+`boolean`
diff --git a/src/content/sdk/react/Internal/functions/insertChild.md b/src/content/sdk/react/Internal/functions/insertChild.md
new file mode 100644
index 00000000..8da9b4a6
--- /dev/null
+++ b/src/content/sdk/react/Internal/functions/insertChild.md
@@ -0,0 +1,62 @@
+# insertChild
+
+> **insertChild**(`parent`: [`AnumaNode`](../interfaces/AnumaNode.md), `node`: [`AnumaNode`](../interfaces/AnumaNode.md), `afterId?`: `string`): `void`
+
+Defined in: [src/tools/slides/jsx.ts:800](https://github.com/anuma-ai/sdk/blob/main/src/tools/slides/jsx.ts#800)
+
+Insert `node` into `parent.children`. If `afterId` is provided, the new
+node is inserted immediately after the matched sibling; otherwise it is
+appended to the end.
+
+## Parameters
+
+
+
+
+
Parameter
+
Type
+
+
+
+
+
+
+`parent`
+
+
+
+
+[`AnumaNode`](../interfaces/AnumaNode.md)
+
+
+
+
+
+
+`node`
+
+
+
+
+[`AnumaNode`](../interfaces/AnumaNode.md)
+
+
+
+
+
+
+`afterId?`
+
+
+
+
+`string`
+
+
+
+
+
+
+## Returns
+
+`void`
diff --git a/src/content/sdk/react/Internal/functions/isAnumaTag.md b/src/content/sdk/react/Internal/functions/isAnumaTag.md
new file mode 100644
index 00000000..d6ebe06a
--- /dev/null
+++ b/src/content/sdk/react/Internal/functions/isAnumaTag.md
@@ -0,0 +1,36 @@
+# isAnumaTag
+
+> **isAnumaTag**(`tag`: `string`): `boolean`
+
+Defined in: [src/tools/slides/jsx.ts:389](https://github.com/anuma-ai/sdk/blob/main/src/tools/slides/jsx.ts#389)
+
+True when a tag is an Anuma primitive (capitalized local name).
+
+## Parameters
+
+
+
+
+
Parameter
+
Type
+
+
+
+
+
+
+`tag`
+
+
+
+
+`string`
+
+
+
+
+
+
+## Returns
+
+`boolean`
diff --git a/src/content/sdk/react/Internal/functions/isHtmlTag.md b/src/content/sdk/react/Internal/functions/isHtmlTag.md
new file mode 100644
index 00000000..65190297
--- /dev/null
+++ b/src/content/sdk/react/Internal/functions/isHtmlTag.md
@@ -0,0 +1,36 @@
+# isHtmlTag
+
+> **isHtmlTag**(`tag`: `string`): `boolean`
+
+Defined in: [src/tools/slides/jsx.ts:399](https://github.com/anuma-ai/sdk/blob/main/src/tools/slides/jsx.ts#399)
+
+True when a tag is a plain HTML element from the allowlist.
+
+## Parameters
+
+
+
+
+
Parameter
+
Type
+
+
+
+
+
+
+`tag`
+
+
+
+
+`string`
+
+
+
+
+
+
+## Returns
+
+`boolean`
diff --git a/src/content/sdk/react/Internal/functions/isSupportedFile.md b/src/content/sdk/react/Internal/functions/isSupportedFile.md
new file mode 100644
index 00000000..d2fa1f61
--- /dev/null
+++ b/src/content/sdk/react/Internal/functions/isSupportedFile.md
@@ -0,0 +1,49 @@
+# isSupportedFile
+
+> **isSupportedFile**(`file`: [`FileTypeQuery`](../interfaces/FileTypeQuery.md)): `boolean`
+
+Defined in: [src/lib/processors/preprocessor.ts:69](https://github.com/anuma-ai/sdk/blob/main/src/lib/processors/preprocessor.ts#69)
+
+Test whether the SDK can extract text from the given file.
+
+Use this for upload-time validation in drag-drop handlers, file-picker
+onChange, or paste handlers — block at the boundary with a clear message
+instead of silently accepting a file the model will never see.
+
+Note: this covers files handled by the SDK's text extractors (PDF, Word,
+Excel, Zip, plain text/markdown/JSON, etc.). Image files (`image/*`) are
+sent directly as `image_url` content parts and are NOT handled by
+processors — combine with an image check in your validation:
+
+```ts
+const ok = file.type.startsWith("image/") || isSupportedFile(file);
+```
+
+## Parameters
+
+
+
+## Returns
+
+`boolean`
diff --git a/src/content/sdk/react/Internal/functions/onKeyAvailable.md b/src/content/sdk/react/Internal/functions/onKeyAvailable.md
index 147b93dc..68b3224e 100644
--- a/src/content/sdk/react/Internal/functions/onKeyAvailable.md
+++ b/src/content/sdk/react/Internal/functions/onKeyAvailable.md
@@ -2,7 +2,7 @@
> **onKeyAvailable**(`address`: `string`, `callback`: () => `void`): () => `void`
-Defined in: [src/react/useEncryption.ts:51](https://github.com/anuma-ai/sdk/blob/main/src/react/useEncryption.ts#51)
+Defined in: [src/react/useEncryption.ts:109](https://github.com/anuma-ai/sdk/blob/main/src/react/useEncryption.ts#109)
Register a callback that fires when an encryption key becomes available for an address.
If the key is already available, the callback fires immediately.
diff --git a/src/content/sdk/react/Internal/functions/parseJsx.md b/src/content/sdk/react/Internal/functions/parseJsx.md
new file mode 100644
index 00000000..f14fcc3f
--- /dev/null
+++ b/src/content/sdk/react/Internal/functions/parseJsx.md
@@ -0,0 +1,34 @@
+# parseJsx
+
+> **parseJsx**(`source`: `string`): [`AnumaNode`](../interfaces/AnumaNode.md)
+
+Defined in: [src/tools/slides/jsx.ts:303](https://github.com/anuma-ai/sdk/blob/main/src/tools/slides/jsx.ts#303)
+
+## Parameters
+
+
+
+
+
Parameter
+
Type
+
+
+
+
+
+
+`source`
+
+
+
+
+`string`
+
+
+
+
+
+
+## Returns
+
+[`AnumaNode`](../interfaces/AnumaNode.md)
diff --git a/src/content/sdk/react/Internal/functions/preprocessFiles.md b/src/content/sdk/react/Internal/functions/preprocessFiles.md
index fae1696f..f35a8c63 100644
--- a/src/content/sdk/react/Internal/functions/preprocessFiles.md
+++ b/src/content/sdk/react/Internal/functions/preprocessFiles.md
@@ -2,7 +2,7 @@
> **preprocessFiles**(`files`: [`FileMetadata`](../interfaces/FileMetadata.md)\[] | `undefined`, `options`: [`PreprocessingOptions`](../interfaces/PreprocessingOptions.md)): `Promise`<[`PreprocessingResult`](../interfaces/PreprocessingResult.md)>
-Defined in: [src/lib/processors/preprocessor.ts:39](https://github.com/anuma-ai/sdk/blob/main/src/lib/processors/preprocessor.ts#39)
+Defined in: [src/lib/processors/preprocessor.ts:118](https://github.com/anuma-ai/sdk/blob/main/src/lib/processors/preprocessor.ts#118)
Preprocess files by extracting text content
diff --git a/src/content/sdk/react/Internal/functions/previewToolSelection.md b/src/content/sdk/react/Internal/functions/previewToolSelection.md
new file mode 100644
index 00000000..8ddeceb3
--- /dev/null
+++ b/src/content/sdk/react/Internal/functions/previewToolSelection.md
@@ -0,0 +1,251 @@
+# previewToolSelection
+
+> **previewToolSelection**(`options`: `object`): `Promise`<{ `clientToolNames`: `string`\[]; `serverToolNames`: `string`\[]; }>
+
+Defined in: [src/react/useChatStorage.ts:301](https://github.com/anuma-ai/sdk/blob/main/src/react/useChatStorage.ts#301)
+
+Preview which tools `useChatStorage` will include for a given prompt,
+without making the actual chat request.
+
+Runs the exact same client + server tool selection pipeline that
+`useChatStorage`'s `sendMessage` runs internally — same embedding,
+same `autoFilterClientTools` call, same server-tools branch — so the
+returned names are guaranteed to match what a real request would
+include for that prompt + config.
+
+Intended for debug UIs ("show me what the model will see for this
+prompt"). Pass the same `clientTools`, `serverToolsFilter`,
+`extraToolSets`, and `activeToolSets` you pass to `useChatStorage`
+so the result is faithful.
+
+Caveats:
+
+* For server tools, this only mirrors the dynamic `findMatchingTools`
+ path (the one used for the responses API in `sendMessage`). If your
+ serverToolsFilter is a function, it's invoked directly with the
+ prompt embedding.
+* Embedding generation hits the same `/embeddings` endpoint as the
+ real request; pass a shared `clientToolEmbeddingsCache` if you call
+ this repeatedly to avoid re-embedding tool descriptions.
+
+## Parameters
+
+
+
+
+
Parameter
+
Type
+
Description
+
+
+
+
+
+
+`options`
+
+
+
+
+`object`
+
+
+
+
+‐
+
+
+
+
+
+
+`options.activeToolSets?`
+
+
+
+
+`string`\[]
+
+
+
+
+‐
+
+
+
+
+
+
+`options.baseUrl?`
+
+
+
+
+`string`
+
+
+
+
+‐
+
+
+
+
+
+
+`options.clientToolEmbeddingsCache?`
+
+
+
+
+`Map`<`string`, `number`\[]>
+
+
+
+
+Optional cache of tool-description embeddings, shared across calls.
+
+
+
+## Returns
+
+`Promise`<{ `clientToolNames`: `string`\[]; `serverToolNames`: `string`\[]; }>
diff --git a/src/content/sdk/react/Internal/functions/putAppFileOp.md b/src/content/sdk/react/Internal/functions/putAppFileOp.md
index 6a7cdc14..990e44a9 100644
--- a/src/content/sdk/react/Internal/functions/putAppFileOp.md
+++ b/src/content/sdk/react/Internal/functions/putAppFileOp.md
@@ -2,7 +2,7 @@
> **putAppFileOp**(`ctx`: [`AppFileOperationsContext`](../interfaces/AppFileOperationsContext.md), `conversationId`: `string`, `path`: `string`, `content`: `string`): `Promise`<[`StoredAppFile`](../interfaces/StoredAppFile.md)>
-Defined in: [src/lib/db/appFiles/operations.ts:43](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/appFiles/operations.ts#43)
+Defined in: [src/lib/db/appFiles/operations.ts:30](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/appFiles/operations.ts#30)
Create or overwrite a file. If a file with the same conversationId + path
already exists, it is updated in place.
diff --git a/src/content/sdk/react/Internal/functions/quantizeEmbedding.md b/src/content/sdk/react/Internal/functions/quantizeEmbedding.md
new file mode 100644
index 00000000..6de80a6d
--- /dev/null
+++ b/src/content/sdk/react/Internal/functions/quantizeEmbedding.md
@@ -0,0 +1,51 @@
+# quantizeEmbedding
+
+> **quantizeEmbedding**(`v`: `number`\[] | `Float32Array`<`ArrayBufferLike`>): [`QuantizedEmbedding`](../interfaces/QuantizedEmbedding.md)
+
+Defined in: [src/lib/memoryEngine/quantization.ts:53](https://github.com/anuma-ai/sdk/blob/main/src/lib/memoryEngine/quantization.ts#53)
+
+Quantize a Float32 embedding (or number\[]) into an Int8 vector + scale.
+
+The scale is the maximum absolute value across the input; all other
+values are mapped linearly into \[-127, 127] and rounded. A zero vector
+yields a zero Int8Array and a scale of 0.
+
+## Parameters
+
+
+
+The embedding to quantize. Either a Float32Array (typical for
+on-device caches) or a plain number\[] (typical for values fresh out of
+`JSON.parse`). Plain numbers are read directly without copying into a
+Float32Array first.
+
+
+
+
+
+
+## Returns
+
+[`QuantizedEmbedding`](../interfaces/QuantizedEmbedding.md)
+
+The quantized data + scale. The returned `data.length === v.length`.
diff --git a/src/content/sdk/react/Internal/functions/removeById.md b/src/content/sdk/react/Internal/functions/removeById.md
new file mode 100644
index 00000000..80076281
--- /dev/null
+++ b/src/content/sdk/react/Internal/functions/removeById.md
@@ -0,0 +1,48 @@
+# removeById
+
+> **removeById**(`root`: [`AnumaNode`](../interfaces/AnumaNode.md), `id`: `string`): `boolean`
+
+Defined in: [src/tools/slides/jsx.ts:822](https://github.com/anuma-ai/sdk/blob/main/src/tools/slides/jsx.ts#822)
+
+Remove the node with matching id. Mutates `root`. Returns true on success.
+
+## Parameters
+
+
+
+
+
Parameter
+
Type
+
+
+
+
+
+
+`root`
+
+
+
+
+[`AnumaNode`](../interfaces/AnumaNode.md)
+
+
+
+
+
+
+`id`
+
+
+
+
+`string`
+
+
+
+
+
+
+## Returns
+
+`boolean`
diff --git a/src/content/sdk/react/Internal/functions/renderAnumaJsx.md b/src/content/sdk/react/Internal/functions/renderAnumaJsx.md
new file mode 100644
index 00000000..6e4e9eff
--- /dev/null
+++ b/src/content/sdk/react/Internal/functions/renderAnumaJsx.md
@@ -0,0 +1,37 @@
+# renderAnumaJsx
+
+> **renderAnumaJsx**(`jsx`: `string`): `ReactElement`<`unknown`, `string` | `JSXElementConstructor`<`any`>> | `null`
+
+Defined in: [src/react/anumaRuntime.tsx:1019](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#1019)
+
+Parse a JSX string and render it. Convenience over
+`parseJsx(jsx) → renderAnumaTree(node)`.
+
+## Parameters
+
+
+
+
+
Parameter
+
Type
+
+
+
+
+
+
+`jsx`
+
+
+
+
+`string`
+
+
+
+
+
+
+## Returns
+
+`ReactElement`<`unknown`, `string` | `JSXElementConstructor`<`any`>> | `null`
diff --git a/src/content/sdk/react/Internal/functions/renderAnumaTree.md b/src/content/sdk/react/Internal/functions/renderAnumaTree.md
new file mode 100644
index 00000000..ce65983f
--- /dev/null
+++ b/src/content/sdk/react/Internal/functions/renderAnumaTree.md
@@ -0,0 +1,37 @@
+# renderAnumaTree
+
+> **renderAnumaTree**(`node`: [`AnumaNode`](../interfaces/AnumaNode.md)): `ReactElement`<`unknown`, `string` | `JSXElementConstructor`<`any`>> | `null`
+
+Defined in: [src/react/anumaRuntime.tsx:1011](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#1011)
+
+Render a parsed `AnumaNode` tree. Wrap with `` if
+you want to override the deck's own theme attrs.
+
+## Parameters
+
+
+
+
+
Parameter
+
Type
+
+
+
+
+
+
+`node`
+
+
+
+
+[`AnumaNode`](../interfaces/AnumaNode.md)
+
+
+
+
+
+
+## Returns
+
+`ReactElement`<`unknown`, `string` | `JSXElementConstructor`<`any`>> | `null`
diff --git a/src/content/sdk/react/Internal/functions/replaceById.md b/src/content/sdk/react/Internal/functions/replaceById.md
new file mode 100644
index 00000000..4cc2df32
--- /dev/null
+++ b/src/content/sdk/react/Internal/functions/replaceById.md
@@ -0,0 +1,61 @@
+# replaceById
+
+> **replaceById**(`root`: [`AnumaNode`](../interfaces/AnumaNode.md), `id`: `string`, `next`: [`AnumaNode`](../interfaces/AnumaNode.md)): `boolean`
+
+Defined in: [src/tools/slides/jsx.ts:773](https://github.com/anuma-ai/sdk/blob/main/src/tools/slides/jsx.ts#773)
+
+Replace the first node with matching id in the tree. Mutates `root` in
+place. Returns true on success.
+
+## Parameters
+
+
+
+
+
Parameter
+
Type
+
+
+
+
+
+
+`root`
+
+
+
+
+[`AnumaNode`](../interfaces/AnumaNode.md)
+
+
+
+
+
+
+`id`
+
+
+
+
+`string`
+
+
+
+
+
+
+`next`
+
+
+
+
+[`AnumaNode`](../interfaces/AnumaNode.md)
+
+
+
+
+
+
+## Returns
+
+`boolean`
diff --git a/src/content/sdk/react/Internal/functions/requestEncryptionKey.md b/src/content/sdk/react/Internal/functions/requestEncryptionKey.md
index ea869eca..ccb18f90 100644
--- a/src/content/sdk/react/Internal/functions/requestEncryptionKey.md
+++ b/src/content/sdk/react/Internal/functions/requestEncryptionKey.md
@@ -2,7 +2,7 @@
> **requestEncryptionKey**(`walletAddress`: `string`, `signMessage`: [`SignMessageFn`](../type-aliases/SignMessageFn.md), `embeddedWalletSigner?`: [`EmbeddedWalletSignerFn`](../type-aliases/EmbeddedWalletSignerFn.md)): `Promise`<`void`>
-Defined in: [src/react/useEncryption.ts:728](https://github.com/anuma-ai/sdk/blob/main/src/react/useEncryption.ts#728)
+Defined in: [src/react/useEncryption.ts:862](https://github.com/anuma-ai/sdk/blob/main/src/react/useEncryption.ts#862)
Requests the user to sign a message to generate an encryption key.
If a key already exists in memory for the given wallet, resolves immediately.
diff --git a/src/content/sdk/react/Internal/functions/requestKeyPair.md b/src/content/sdk/react/Internal/functions/requestKeyPair.md
index ee12f50a..82222574 100644
--- a/src/content/sdk/react/Internal/functions/requestKeyPair.md
+++ b/src/content/sdk/react/Internal/functions/requestKeyPair.md
@@ -2,7 +2,7 @@
> **requestKeyPair**(`walletAddress`: `string`, `signMessage`: [`SignMessageFn`](../type-aliases/SignMessageFn.md), `embeddedWalletSigner?`: [`EmbeddedWalletSignerFn`](../type-aliases/EmbeddedWalletSignerFn.md)): `Promise`<`void`>
-Defined in: [src/react/useEncryption.ts:1021](https://github.com/anuma-ai/sdk/blob/main/src/react/useEncryption.ts#1021)
+Defined in: [src/react/useEncryption.ts:1184](https://github.com/anuma-ai/sdk/blob/main/src/react/useEncryption.ts#1184)
Requests the user to sign a message to generate an ECDH key pair.
If a key pair already exists in memory for the given wallet, resolves immediately.
diff --git a/src/content/sdk/react/Internal/functions/resolveThemeColor.md b/src/content/sdk/react/Internal/functions/resolveThemeColor.md
new file mode 100644
index 00000000..0cf4c7bd
--- /dev/null
+++ b/src/content/sdk/react/Internal/functions/resolveThemeColor.md
@@ -0,0 +1,50 @@
+# resolveThemeColor
+
+> **resolveThemeColor**(`value`: `unknown`, `theme`: [`AnumaTheme`](../interfaces/AnumaTheme.md)): `string` | `undefined`
+
+Defined in: [src/react/anumaRuntime.tsx:150](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#150)
+
+Resolve a color token against the theme. Pass-through for hex/rgb/named
+CSS colors; theme tokens (`textPrimary`, `accent`, …) become their
+contextual hex value.
+
+## Parameters
+
+
+
+**Returns**
+
+`Promise`<[`StoredMessage`](StoredMessage.md) | `null`>
+
+***
+
+### write()
+
+> **write**<`T`>(`fn`: (`adapter`: `ChatStorageAdapter`) => `Promise`<`T`>): `Promise`<`T`>
+
+Defined in: [src/lib/storage/ChatStorageAdapter.ts:156](https://github.com/anuma-ai/sdk/blob/main/src/lib/storage/ChatStorageAdapter.ts#156)
+
+Run a set of mutations inside a single write transaction. Any mutation
+calls made on the adapter inside the callback are grouped into one atomic
+write on backends that support it.
+
+On backends without transaction support, this may fall back to sequential
+writes. Implementations must document the guarantee they provide.
+
+**Type Parameters**
+
+
+
+**Returns**
+
+`Promise`<`T`>
diff --git a/src/content/sdk/react/Internal/interfaces/ChatStorageObservable.md b/src/content/sdk/react/Internal/interfaces/ChatStorageObservable.md
new file mode 100644
index 00000000..713ceaa9
--- /dev/null
+++ b/src/content/sdk/react/Internal/interfaces/ChatStorageObservable.md
@@ -0,0 +1,109 @@
+# ChatStorageObservable\
+
+Defined in: [src/lib/storage/ChatStorageAdapter.ts:68](https://github.com/anuma-ai/sdk/blob/main/src/lib/storage/ChatStorageAdapter.ts#68)
+
+Minimal interface for an observable (reactive) query result.
+
+Shaped to be compatible with RxJS-style `Observable` (which is what
+WatermelonDB returns) and with a simple polling fallback, so non-reactive
+backends can implement it without depending on rxjs.
+
+## Type Parameters
+
+
+
+**Returns**
+
+`object`
+
+**unsubscribe()**
+
+> **unsubscribe**: () => `void`
+
+**Returns**
+
+`void`
diff --git a/src/content/sdk/react/Internal/interfaces/ChunkSearchResult.md b/src/content/sdk/react/Internal/interfaces/ChunkSearchResult.md
index 0bd49dc0..6eed8990 100644
--- a/src/content/sdk/react/Internal/interfaces/ChunkSearchResult.md
+++ b/src/content/sdk/react/Internal/interfaces/ChunkSearchResult.md
@@ -1,6 +1,6 @@
# ChunkSearchResult
-Defined in: [src/lib/db/chat/types.ts:210](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#210)
+Defined in: [src/lib/db/chat/types.ts:235](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#235)
Search result from chunk-based search
@@ -10,7 +10,7 @@ Search result from chunk-based search
> **chunkText**: `string`
-Defined in: [src/lib/db/chat/types.ts:212](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#212)
+Defined in: [src/lib/db/chat/types.ts:237](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#237)
The matching chunk text
@@ -20,7 +20,7 @@ The matching chunk text
> **message**: [`StoredMessage`](StoredMessage.md)
-Defined in: [src/lib/db/chat/types.ts:214](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#214)
+Defined in: [src/lib/db/chat/types.ts:239](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#239)
The full message containing this chunk
@@ -30,6 +30,6 @@ The full message containing this chunk
> **similarity**: `number`
-Defined in: [src/lib/db/chat/types.ts:216](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#216)
+Defined in: [src/lib/db/chat/types.ts:241](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#241)
Similarity score of the chunk
diff --git a/src/content/sdk/react/Internal/interfaces/CircleProps.md b/src/content/sdk/react/Internal/interfaces/CircleProps.md
new file mode 100644
index 00000000..5803066e
--- /dev/null
+++ b/src/content/sdk/react/Internal/interfaces/CircleProps.md
@@ -0,0 +1,163 @@
+# CircleProps
+
+Defined in: [src/react/anumaRuntime.tsx:556](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#556)
+
+## Extends
+
+* `CommonProps`
+
+## Properties
+
+### alignSelf?
+
+> `optional` **alignSelf**: `string`
+
+Defined in: [src/react/anumaRuntime.tsx:169](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#169)
+
+**Inherited from**
+
+`CommonProps.alignSelf`
+
+***
+
+### children?
+
+> `optional` **children**: `ReactNode`
+
+Defined in: [src/react/anumaRuntime.tsx:281](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#281)
+
+**Inherited from**
+
+`CommonProps.children`
+
+***
+
+### fill?
+
+> `optional` **fill**: `string`
+
+Defined in: [src/react/anumaRuntime.tsx:557](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#557)
+
+***
+
+### grow?
+
+> `optional` **grow**: `number`
+
+Defined in: [src/react/anumaRuntime.tsx:167](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#167)
+
+**Inherited from**
+
+`CommonProps.grow`
+
+***
+
+### h?
+
+> `optional` **h**: `number`
+
+Defined in: [src/react/anumaRuntime.tsx:165](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#165)
+
+**Inherited from**
+
+`CommonProps.h`
+
+***
+
+### id?
+
+> `optional` **id**: `string`
+
+Defined in: [src/react/anumaRuntime.tsx:279](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#279)
+
+**Inherited from**
+
+`CommonProps.id`
+
+***
+
+### rotation?
+
+> `optional` **rotation**: `number`
+
+Defined in: [src/react/anumaRuntime.tsx:166](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#166)
+
+**Inherited from**
+
+`CommonProps.rotation`
+
+***
+
+### shrink?
+
+> `optional` **shrink**: `number`
+
+Defined in: [src/react/anumaRuntime.tsx:168](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#168)
+
+**Inherited from**
+
+`CommonProps.shrink`
+
+***
+
+### stroke?
+
+> `optional` **stroke**: `string`
+
+Defined in: [src/react/anumaRuntime.tsx:558](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#558)
+
+***
+
+### strokeWidth?
+
+> `optional` **strokeWidth**: `number`
+
+Defined in: [src/react/anumaRuntime.tsx:559](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#559)
+
+***
+
+### style?
+
+> `optional` **style**: `CSSProperties`
+
+Defined in: [src/react/anumaRuntime.tsx:280](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#280)
+
+**Inherited from**
+
+`CommonProps.style`
+
+***
+
+### w?
+
+> `optional` **w**: `number`
+
+Defined in: [src/react/anumaRuntime.tsx:164](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#164)
+
+**Inherited from**
+
+`CommonProps.w`
+
+***
+
+### x?
+
+> `optional` **x**: `number`
+
+Defined in: [src/react/anumaRuntime.tsx:162](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#162)
+
+**Inherited from**
+
+`CommonProps.x`
+
+***
+
+### y?
+
+> `optional` **y**: `number`
+
+Defined in: [src/react/anumaRuntime.tsx:163](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#163)
+
+**Inherited from**
+
+`CommonProps.y`
diff --git a/src/content/sdk/react/Internal/interfaces/ConversationQueryOptions.md b/src/content/sdk/react/Internal/interfaces/ConversationQueryOptions.md
new file mode 100644
index 00000000..02a3afb4
--- /dev/null
+++ b/src/content/sdk/react/Internal/interfaces/ConversationQueryOptions.md
@@ -0,0 +1,16 @@
+# ConversationQueryOptions
+
+Defined in: [src/lib/storage/ChatStorageAdapter.ts:80](https://github.com/anuma-ai/sdk/blob/main/src/lib/storage/ChatStorageAdapter.ts#80)
+
+Common filter options for conversation queries. Kept deliberately narrow —
+most call sites only need these.
+
+## Properties
+
+### projectId?
+
+> `optional` **projectId**: `string` | `null`
+
+Defined in: [src/lib/storage/ChatStorageAdapter.ts:82](https://github.com/anuma-ai/sdk/blob/main/src/lib/storage/ChatStorageAdapter.ts#82)
+
+If set, only return conversations in this project. `null` = no project.
diff --git a/src/content/sdk/react/Internal/interfaces/CreateConversationOptions.md b/src/content/sdk/react/Internal/interfaces/CreateConversationOptions.md
index 9ce38315..387bc304 100644
--- a/src/content/sdk/react/Internal/interfaces/CreateConversationOptions.md
+++ b/src/content/sdk/react/Internal/interfaces/CreateConversationOptions.md
@@ -1,6 +1,6 @@
# CreateConversationOptions
-Defined in: [src/lib/db/chat/types.ts:260](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#260)
+Defined in: [src/lib/db/chat/types.ts:293](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#293)
## Properties
@@ -8,7 +8,7 @@ Defined in: [src/lib/db/chat/types.ts:260](https://github.com/anuma-ai/sdk/blob/
> `optional` **conversationId**: `string`
-Defined in: [src/lib/db/chat/types.ts:261](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#261)
+Defined in: [src/lib/db/chat/types.ts:294](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#294)
***
@@ -16,7 +16,7 @@ Defined in: [src/lib/db/chat/types.ts:261](https://github.com/anuma-ai/sdk/blob/
> `optional` **projectId**: `string`
-Defined in: [src/lib/db/chat/types.ts:264](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#264)
+Defined in: [src/lib/db/chat/types.ts:297](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#297)
Optional project ID to associate this conversation with
@@ -26,4 +26,4 @@ Optional project ID to associate this conversation with
> `optional` **title**: `string`
-Defined in: [src/lib/db/chat/types.ts:262](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#262)
+Defined in: [src/lib/db/chat/types.ts:295](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#295)
diff --git a/src/content/sdk/react/Internal/interfaces/CreateMessageOptions.md b/src/content/sdk/react/Internal/interfaces/CreateMessageOptions.md
index a8680aca..d81b535f 100644
--- a/src/content/sdk/react/Internal/interfaces/CreateMessageOptions.md
+++ b/src/content/sdk/react/Internal/interfaces/CreateMessageOptions.md
@@ -1,6 +1,6 @@
# CreateMessageOptions
-Defined in: [src/lib/db/chat/types.ts:232](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#232)
+Defined in: [src/lib/db/chat/types.ts:257](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#257)
## Properties
@@ -8,7 +8,7 @@ Defined in: [src/lib/db/chat/types.ts:232](https://github.com/anuma-ai/sdk/blob/
> **content**: `string`
-Defined in: [src/lib/db/chat/types.ts:235](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#235)
+Defined in: [src/lib/db/chat/types.ts:260](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#260)
***
@@ -16,7 +16,7 @@ Defined in: [src/lib/db/chat/types.ts:235](https://github.com/anuma-ai/sdk/blob/
> **conversationId**: `string`
-Defined in: [src/lib/db/chat/types.ts:233](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#233)
+Defined in: [src/lib/db/chat/types.ts:258](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#258)
***
@@ -24,7 +24,7 @@ Defined in: [src/lib/db/chat/types.ts:233](https://github.com/anuma-ai/sdk/blob/
> `optional` **embeddingModel**: `string`
-Defined in: [src/lib/db/chat/types.ts:247](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#247)
+Defined in: [src/lib/db/chat/types.ts:272](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#272)
***
@@ -32,7 +32,7 @@ Defined in: [src/lib/db/chat/types.ts:247](https://github.com/anuma-ai/sdk/blob/
> `optional` **error**: `string`
-Defined in: [src/lib/db/chat/types.ts:250](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#250)
+Defined in: [src/lib/db/chat/types.ts:275](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#275)
If set, indicates the message failed with this error
@@ -42,7 +42,7 @@ If set, indicates the message failed with this error
> `optional` **fileIds**: `string`\[]
-Defined in: [src/lib/db/chat/types.ts:242](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#242)
+Defined in: [src/lib/db/chat/types.ts:267](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#267)
Array of media\_id references for direct lookup in media table
@@ -52,7 +52,7 @@ Array of media\_id references for direct lookup in media table
> `optional` **files**: [`FileMetadata`](FileMetadata.md)\[]
-Defined in: [src/lib/db/chat/types.ts:240](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#240)
+Defined in: [src/lib/db/chat/types.ts:265](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#265)
**Deprecated**
@@ -64,7 +64,7 @@ Use fileIds with media table instead
> `optional` **imageModel**: `string`
-Defined in: [src/lib/db/chat/types.ts:238](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#238)
+Defined in: [src/lib/db/chat/types.ts:263](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#263)
Image generation model used for this message
@@ -74,7 +74,7 @@ Image generation model used for this message
> `optional` **model**: `string`
-Defined in: [src/lib/db/chat/types.ts:236](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#236)
+Defined in: [src/lib/db/chat/types.ts:261](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#261)
***
@@ -82,7 +82,7 @@ Defined in: [src/lib/db/chat/types.ts:236](https://github.com/anuma-ai/sdk/blob/
> `optional` **parentMessageId**: `string`
-Defined in: [src/lib/db/chat/types.ts:255](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#255)
+Defined in: [src/lib/db/chat/types.ts:280](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#280)
Parent message ID for branching (edit/regenerate).
@@ -92,7 +92,7 @@ Parent message ID for branching (edit/regenerate).
> `optional` **responseDuration**: `number`
-Defined in: [src/lib/db/chat/types.ts:245](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#245)
+Defined in: [src/lib/db/chat/types.ts:270](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#270)
***
@@ -100,7 +100,7 @@ Defined in: [src/lib/db/chat/types.ts:245](https://github.com/anuma-ai/sdk/blob/
> **role**: [`ChatRole`](../type-aliases/ChatRole.md)
-Defined in: [src/lib/db/chat/types.ts:234](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#234)
+Defined in: [src/lib/db/chat/types.ts:259](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#259)
***
@@ -108,7 +108,7 @@ Defined in: [src/lib/db/chat/types.ts:234](https://github.com/anuma-ai/sdk/blob/
> `optional` **sources**: [`SearchSource`](SearchSource.md)\[]
-Defined in: [src/lib/db/chat/types.ts:244](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#244)
+Defined in: [src/lib/db/chat/types.ts:269](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#269)
***
@@ -116,7 +116,7 @@ Defined in: [src/lib/db/chat/types.ts:244](https://github.com/anuma-ai/sdk/blob/
> `optional` **thinking**: `string`
-Defined in: [src/lib/db/chat/types.ts:253](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#253)
+Defined in: [src/lib/db/chat/types.ts:278](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#278)
Reasoning/thinking content from models that support extended thinking
@@ -126,7 +126,7 @@ Reasoning/thinking content from models that support extended thinking
> `optional` **thoughtProcess**: `ActivityPhase`\[]
-Defined in: [src/lib/db/chat/types.ts:251](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#251)
+Defined in: [src/lib/db/chat/types.ts:276](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#276)
***
@@ -134,17 +134,31 @@ Defined in: [src/lib/db/chat/types.ts:251](https://github.com/anuma-ai/sdk/blob/
> `optional` **toolCallEvents**: [`LlmapiToolCallEvent`](../../../client/Internal/type-aliases/LlmapiToolCallEvent.md)\[]
-Defined in: [src/lib/db/chat/types.ts:257](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#257)
+Defined in: [src/lib/db/chat/types.ts:282](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#282)
Tool call events from the backend response (for reconstructing tool call history)
***
+### uniqueId?
+
+> `optional` **uniqueId**: `string`
+
+Defined in: [src/lib/db/chat/types.ts:290](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#290)
+
+Optional pre-generated unique ID for this message.
+When provided, used as the WatermelonDB record ID instead of auto-generating one.
+Consumers can pre-allocate this ID before streaming starts so the in-flight
+placeholder and the eventually-persisted message share the same React key,
+eliminating the unmount/remount flash when streaming completes.
+
+***
+
### usage?
> `optional` **usage**: [`StoredChatCompletionUsage`](StoredChatCompletionUsage.md)
-Defined in: [src/lib/db/chat/types.ts:243](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#243)
+Defined in: [src/lib/db/chat/types.ts:268](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#268)
***
@@ -152,7 +166,7 @@ Defined in: [src/lib/db/chat/types.ts:243](https://github.com/anuma-ai/sdk/blob/
> `optional` **vector**: `number`\[]
-Defined in: [src/lib/db/chat/types.ts:246](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#246)
+Defined in: [src/lib/db/chat/types.ts:271](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#271)
***
@@ -160,4 +174,4 @@ Defined in: [src/lib/db/chat/types.ts:246](https://github.com/anuma-ai/sdk/blob/
> `optional` **wasStopped**: `boolean`
-Defined in: [src/lib/db/chat/types.ts:248](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#248)
+Defined in: [src/lib/db/chat/types.ts:273](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#273)
diff --git a/src/content/sdk/react/Internal/interfaces/CreateServerToolsFilterOptions.md b/src/content/sdk/react/Internal/interfaces/CreateServerToolsFilterOptions.md
new file mode 100644
index 00000000..f41927fb
--- /dev/null
+++ b/src/content/sdk/react/Internal/interfaces/CreateServerToolsFilterOptions.md
@@ -0,0 +1,37 @@
+# CreateServerToolsFilterOptions
+
+Defined in: [src/lib/tools/serverTools.ts:1003](https://github.com/anuma-ai/sdk/blob/main/src/lib/tools/serverTools.ts#1003)
+
+Options for createServerToolsFilter.
+
+## Properties
+
+### excludeTools?
+
+> `optional` **excludeTools**: `Iterable`<`string`, `any`, `any`>
+
+Defined in: [src/lib/tools/serverTools.ts:1011](https://github.com/anuma-ai/sdk/blob/main/src/lib/tools/serverTools.ts#1011)
+
+Tool names to always drop from results, even when they match.
+
+***
+
+### matchOptions?
+
+> `optional` **matchOptions**: [`ToolMatchOptions`](ToolMatchOptions.md)
+
+Defined in: [src/lib/tools/serverTools.ts:1013](https://github.com/anuma-ai/sdk/blob/main/src/lib/tools/serverTools.ts#1013)
+
+Options forwarded to `findMatchingTools`.
+
+***
+
+### toolSets?
+
+> `optional` **toolSets**: [`ToolSet`](ToolSet.md)\[]
+
+Defined in: [src/lib/tools/serverTools.ts:1009](https://github.com/anuma-ai/sdk/blob/main/src/lib/tools/serverTools.ts#1009)
+
+Tool sets to expand additively. When any anchor scores at or above the
+set's `anchorMinSimilarity`, all members are included alongside the
+original semantic matches.
diff --git a/src/content/sdk/react/Internal/interfaces/DeckProps.md b/src/content/sdk/react/Internal/interfaces/DeckProps.md
new file mode 100644
index 00000000..8b893347
--- /dev/null
+++ b/src/content/sdk/react/Internal/interfaces/DeckProps.md
@@ -0,0 +1,222 @@
+# DeckProps
+
+Defined in: [src/react/anumaRuntime.tsx:288](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#288)
+
+Top-level deck container. Provides the theme context (when any of the
+theme attrs are set on this node) and renders Slides as flow children.
+
+## Extends
+
+* `CommonProps`
+
+## Properties
+
+### accent?
+
+> `optional` **accent**: `string`
+
+Defined in: [src/react/anumaRuntime.tsx:296](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#296)
+
+***
+
+### alignSelf?
+
+> `optional` **alignSelf**: `string`
+
+Defined in: [src/react/anumaRuntime.tsx:169](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#169)
+
+**Inherited from**
+
+`CommonProps.alignSelf`
+
+***
+
+### background?
+
+> `optional` **background**: `string`
+
+Defined in: [src/react/anumaRuntime.tsx:290](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#290)
+
+***
+
+### border?
+
+> `optional` **border**: `string`
+
+Defined in: [src/react/anumaRuntime.tsx:298](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#298)
+
+***
+
+### card?
+
+> `optional` **card**: `string`
+
+Defined in: [src/react/anumaRuntime.tsx:297](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#297)
+
+***
+
+### children?
+
+> `optional` **children**: `ReactNode`
+
+Defined in: [src/react/anumaRuntime.tsx:281](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#281)
+
+**Inherited from**
+
+`CommonProps.children`
+
+***
+
+### fontPreset?
+
+> `optional` **fontPreset**: `string`
+
+Defined in: [src/react/anumaRuntime.tsx:289](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#289)
+
+***
+
+### grow?
+
+> `optional` **grow**: `number`
+
+Defined in: [src/react/anumaRuntime.tsx:167](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#167)
+
+**Inherited from**
+
+`CommonProps.grow`
+
+***
+
+### h?
+
+> `optional` **h**: `number`
+
+Defined in: [src/react/anumaRuntime.tsx:165](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#165)
+
+**Inherited from**
+
+`CommonProps.h`
+
+***
+
+### id?
+
+> `optional` **id**: `string`
+
+Defined in: [src/react/anumaRuntime.tsx:279](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#279)
+
+**Inherited from**
+
+`CommonProps.id`
+
+***
+
+### rotation?
+
+> `optional` **rotation**: `number`
+
+Defined in: [src/react/anumaRuntime.tsx:166](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#166)
+
+**Inherited from**
+
+`CommonProps.rotation`
+
+***
+
+### shrink?
+
+> `optional` **shrink**: `number`
+
+Defined in: [src/react/anumaRuntime.tsx:168](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#168)
+
+**Inherited from**
+
+`CommonProps.shrink`
+
+***
+
+### slideBg?
+
+> `optional` **slideBg**: `string`
+
+Defined in: [src/react/anumaRuntime.tsx:291](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#291)
+
+***
+
+### style?
+
+> `optional` **style**: `CSSProperties`
+
+Defined in: [src/react/anumaRuntime.tsx:280](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#280)
+
+**Inherited from**
+
+`CommonProps.style`
+
+***
+
+### surfaceSecondary?
+
+> `optional` **surfaceSecondary**: `string`
+
+Defined in: [src/react/anumaRuntime.tsx:292](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#292)
+
+***
+
+### textMuted?
+
+> `optional` **textMuted**: `string`
+
+Defined in: [src/react/anumaRuntime.tsx:295](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#295)
+
+***
+
+### textPrimary?
+
+> `optional` **textPrimary**: `string`
+
+Defined in: [src/react/anumaRuntime.tsx:293](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#293)
+
+***
+
+### textSecondary?
+
+> `optional` **textSecondary**: `string`
+
+Defined in: [src/react/anumaRuntime.tsx:294](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#294)
+
+***
+
+### w?
+
+> `optional` **w**: `number`
+
+Defined in: [src/react/anumaRuntime.tsx:164](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#164)
+
+**Inherited from**
+
+`CommonProps.w`
+
+***
+
+### x?
+
+> `optional` **x**: `number`
+
+Defined in: [src/react/anumaRuntime.tsx:162](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#162)
+
+**Inherited from**
+
+`CommonProps.x`
+
+***
+
+### y?
+
+> `optional` **y**: `number`
+
+Defined in: [src/react/anumaRuntime.tsx:163](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#163)
+
+**Inherited from**
+
+`CommonProps.y`
diff --git a/src/content/sdk/react/Internal/interfaces/FileMetadata.md b/src/content/sdk/react/Internal/interfaces/FileMetadata.md
index fd4fce60..5ee2c0fe 100644
--- a/src/content/sdk/react/Internal/interfaces/FileMetadata.md
+++ b/src/content/sdk/react/Internal/interfaces/FileMetadata.md
@@ -1,6 +1,6 @@
# FileMetadata
-Defined in: [src/lib/db/chat/types.ts:70](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#70)
+Defined in: [src/lib/db/chat/types.ts:71](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#71)
Metadata for files attached to messages.
@@ -20,7 +20,7 @@ Note the distinction between `url` and `sourceUrl`:
> **id**: `string`
-Defined in: [src/lib/db/chat/types.ts:72](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#72)
+Defined in: [src/lib/db/chat/types.ts:73](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#73)
Unique identifier for the file (used as OPFS key for cached files)
@@ -30,7 +30,7 @@ Unique identifier for the file (used as OPFS key for cached files)
> **name**: `string`
-Defined in: [src/lib/db/chat/types.ts:74](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#74)
+Defined in: [src/lib/db/chat/types.ts:75](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#75)
Display name of the file
@@ -40,7 +40,7 @@ Display name of the file
> **size**: `number`
-Defined in: [src/lib/db/chat/types.ts:78](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#78)
+Defined in: [src/lib/db/chat/types.ts:79](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#79)
File size in bytes
@@ -50,7 +50,7 @@ File size in bytes
> `optional` **sourceUrl**: `string`
-Defined in: [src/lib/db/chat/types.ts:94](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#94)
+Defined in: [src/lib/db/chat/types.ts:95](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#95)
Original external URL for files downloaded and cached locally (e.g., from MCP R2).
Used purely for URL→OPFS mapping to enable fallback when the source returns 404.
@@ -64,7 +64,7 @@ The file content is served from OPFS using the `id` field.
> **type**: `string`
-Defined in: [src/lib/db/chat/types.ts:76](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#76)
+Defined in: [src/lib/db/chat/types.ts:77](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#77)
MIME type (e.g., "image/png")
@@ -74,7 +74,7 @@ MIME type (e.g., "image/png")
> `optional` **url**: `string`
-Defined in: [src/lib/db/chat/types.ts:86](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#86)
+Defined in: [src/lib/db/chat/types.ts:87](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#87)
Content URL to include when sending this message to the AI.
When present, this URL is added as an `image_url` content part.
diff --git a/src/content/sdk/react/Internal/interfaces/FileTypeQuery.md b/src/content/sdk/react/Internal/interfaces/FileTypeQuery.md
new file mode 100644
index 00000000..96aba262
--- /dev/null
+++ b/src/content/sdk/react/Internal/interfaces/FileTypeQuery.md
@@ -0,0 +1,23 @@
+# FileTypeQuery
+
+Defined in: [src/lib/processors/registry.ts:8](https://github.com/anuma-ai/sdk/blob/main/src/lib/processors/registry.ts#8)
+
+Minimal file shape needed to look up or test for a processor.
+Wider than `FileMetadata` so callers with `File`, `Blob`-like objects, or
+just a `{ name, type }` pair from a drag-drop event can use the API.
+
+## Properties
+
+### name
+
+> **name**: `string`
+
+Defined in: [src/lib/processors/registry.ts:9](https://github.com/anuma-ai/sdk/blob/main/src/lib/processors/registry.ts#9)
+
+***
+
+### type
+
+> **type**: `string`
+
+Defined in: [src/lib/processors/registry.ts:10](https://github.com/anuma-ai/sdk/blob/main/src/lib/processors/registry.ts#10)
diff --git a/src/content/sdk/react/Internal/interfaces/FileWithData.md b/src/content/sdk/react/Internal/interfaces/FileWithData.md
index 0f1451da..1c1ef828 100644
--- a/src/content/sdk/react/Internal/interfaces/FileWithData.md
+++ b/src/content/sdk/react/Internal/interfaces/FileWithData.md
@@ -24,7 +24,7 @@ Data URL or blob URL containing file content
> **id**: `string`
-Defined in: [src/lib/db/chat/types.ts:72](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#72)
+Defined in: [src/lib/db/chat/types.ts:73](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#73)
Unique identifier for the file (used as OPFS key for cached files)
@@ -38,7 +38,7 @@ Unique identifier for the file (used as OPFS key for cached files)
> **name**: `string`
-Defined in: [src/lib/db/chat/types.ts:74](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#74)
+Defined in: [src/lib/db/chat/types.ts:75](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#75)
Display name of the file
@@ -52,7 +52,7 @@ Display name of the file
> **size**: `number`
-Defined in: [src/lib/db/chat/types.ts:78](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#78)
+Defined in: [src/lib/db/chat/types.ts:79](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#79)
File size in bytes
@@ -66,7 +66,7 @@ File size in bytes
> `optional` **sourceUrl**: `string`
-Defined in: [src/lib/db/chat/types.ts:94](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#94)
+Defined in: [src/lib/db/chat/types.ts:95](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#95)
Original external URL for files downloaded and cached locally (e.g., from MCP R2).
Used purely for URL→OPFS mapping to enable fallback when the source returns 404.
@@ -84,7 +84,7 @@ The file content is served from OPFS using the `id` field.
> **type**: `string`
-Defined in: [src/lib/db/chat/types.ts:76](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#76)
+Defined in: [src/lib/db/chat/types.ts:77](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#77)
MIME type (e.g., "image/png")
@@ -98,7 +98,7 @@ MIME type (e.g., "image/png")
> `optional` **url**: `string`
-Defined in: [src/lib/db/chat/types.ts:86](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#86)
+Defined in: [src/lib/db/chat/types.ts:87](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#87)
Content URL to include when sending this message to the AI.
When present, this URL is added as an `image_url` content part.
diff --git a/src/content/sdk/react/Internal/interfaces/GroupProps.md b/src/content/sdk/react/Internal/interfaces/GroupProps.md
new file mode 100644
index 00000000..a0e9d5db
--- /dev/null
+++ b/src/content/sdk/react/Internal/interfaces/GroupProps.md
@@ -0,0 +1,218 @@
+# GroupProps
+
+Defined in: [src/react/anumaRuntime.tsx:457](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#457)
+
+Structural group. Defaults to absolute positioning of children;
+opt into flex via `layout="row" | "column"`.
+
+## Extends
+
+* `CommonProps`.`ContainerLayoutProps`
+
+## Properties
+
+### align?
+
+> `optional` **align**: `string`
+
+Defined in: [src/react/anumaRuntime.tsx:177](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#177)
+
+**Inherited from**
+
+`ContainerLayoutProps.align`
+
+***
+
+### alignSelf?
+
+> `optional` **alignSelf**: `string`
+
+Defined in: [src/react/anumaRuntime.tsx:169](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#169)
+
+**Inherited from**
+
+`CommonProps.alignSelf`
+
+***
+
+### children?
+
+> `optional` **children**: `ReactNode`
+
+Defined in: [src/react/anumaRuntime.tsx:281](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#281)
+
+**Inherited from**
+
+`CommonProps.children`
+
+***
+
+### fill?
+
+> `optional` **fill**: `string`
+
+Defined in: [src/react/anumaRuntime.tsx:467](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#467)
+
+Background fill, applied as `background-color` on the Group's
+div. Resolves theme color tokens (e.g. "accent", "card") via
+`resolveThemeColor`. Mirrors the `fill` prop on Rect/Circle/Line —
+a Group is a layout container, but design-tool consumers
+frequently want it to also carry a fill (auto-layout frames, card
+surfaces, button bodies). `style.background` still works as an
+override / for gradients.
+
+***
+
+### gap?
+
+> `optional` **gap**: `number`
+
+Defined in: [src/react/anumaRuntime.tsx:174](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#174)
+
+**Inherited from**
+
+`ContainerLayoutProps.gap`
+
+***
+
+### grow?
+
+> `optional` **grow**: `number`
+
+Defined in: [src/react/anumaRuntime.tsx:167](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#167)
+
+**Inherited from**
+
+`CommonProps.grow`
+
+***
+
+### h?
+
+> `optional` **h**: `number`
+
+Defined in: [src/react/anumaRuntime.tsx:165](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#165)
+
+**Inherited from**
+
+`CommonProps.h`
+
+***
+
+### id?
+
+> `optional` **id**: `string`
+
+Defined in: [src/react/anumaRuntime.tsx:279](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#279)
+
+**Inherited from**
+
+`CommonProps.id`
+
+***
+
+### justify?
+
+> `optional` **justify**: `string`
+
+Defined in: [src/react/anumaRuntime.tsx:176](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#176)
+
+**Inherited from**
+
+`ContainerLayoutProps.justify`
+
+***
+
+### layout?
+
+> `optional` **layout**: `string`
+
+Defined in: [src/react/anumaRuntime.tsx:173](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#173)
+
+**Inherited from**
+
+`ContainerLayoutProps.layout`
+
+***
+
+### padding?
+
+> `optional` **padding**: `number`
+
+Defined in: [src/react/anumaRuntime.tsx:175](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#175)
+
+**Inherited from**
+
+`ContainerLayoutProps.padding`
+
+***
+
+### rotation?
+
+> `optional` **rotation**: `number`
+
+Defined in: [src/react/anumaRuntime.tsx:166](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#166)
+
+**Inherited from**
+
+`CommonProps.rotation`
+
+***
+
+### shrink?
+
+> `optional` **shrink**: `number`
+
+Defined in: [src/react/anumaRuntime.tsx:168](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#168)
+
+**Inherited from**
+
+`CommonProps.shrink`
+
+***
+
+### style?
+
+> `optional` **style**: `CSSProperties`
+
+Defined in: [src/react/anumaRuntime.tsx:280](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#280)
+
+**Inherited from**
+
+`CommonProps.style`
+
+***
+
+### w?
+
+> `optional` **w**: `number`
+
+Defined in: [src/react/anumaRuntime.tsx:164](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#164)
+
+**Inherited from**
+
+`CommonProps.w`
+
+***
+
+### x?
+
+> `optional` **x**: `number`
+
+Defined in: [src/react/anumaRuntime.tsx:162](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#162)
+
+**Inherited from**
+
+`CommonProps.x`
+
+***
+
+### y?
+
+> `optional` **y**: `number`
+
+Defined in: [src/react/anumaRuntime.tsx:163](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#163)
+
+**Inherited from**
+
+`CommonProps.y`
diff --git a/src/content/sdk/react/Internal/interfaces/IconProps.md b/src/content/sdk/react/Internal/interfaces/IconProps.md
new file mode 100644
index 00000000..7aa9c65e
--- /dev/null
+++ b/src/content/sdk/react/Internal/interfaces/IconProps.md
@@ -0,0 +1,147 @@
+# IconProps
+
+Defined in: [src/react/anumaRuntime.tsx:737](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#737)
+
+## Extends
+
+* `CommonProps`
+
+## Properties
+
+### alignSelf?
+
+> `optional` **alignSelf**: `string`
+
+Defined in: [src/react/anumaRuntime.tsx:169](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#169)
+
+**Inherited from**
+
+`CommonProps.alignSelf`
+
+***
+
+### children?
+
+> `optional` **children**: `ReactNode`
+
+Defined in: [src/react/anumaRuntime.tsx:281](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#281)
+
+**Inherited from**
+
+`CommonProps.children`
+
+***
+
+### grow?
+
+> `optional` **grow**: `number`
+
+Defined in: [src/react/anumaRuntime.tsx:167](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#167)
+
+**Inherited from**
+
+`CommonProps.grow`
+
+***
+
+### h?
+
+> `optional` **h**: `number`
+
+Defined in: [src/react/anumaRuntime.tsx:165](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#165)
+
+**Inherited from**
+
+`CommonProps.h`
+
+***
+
+### id?
+
+> `optional` **id**: `string`
+
+Defined in: [src/react/anumaRuntime.tsx:279](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#279)
+
+**Inherited from**
+
+`CommonProps.id`
+
+***
+
+### name?
+
+> `optional` **name**: `string`
+
+Defined in: [src/react/anumaRuntime.tsx:738](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#738)
+
+***
+
+### rotation?
+
+> `optional` **rotation**: `number`
+
+Defined in: [src/react/anumaRuntime.tsx:166](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#166)
+
+**Inherited from**
+
+`CommonProps.rotation`
+
+***
+
+### shrink?
+
+> `optional` **shrink**: `number`
+
+Defined in: [src/react/anumaRuntime.tsx:168](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#168)
+
+**Inherited from**
+
+`CommonProps.shrink`
+
+***
+
+### style?
+
+> `optional` **style**: `CSSProperties`
+
+Defined in: [src/react/anumaRuntime.tsx:280](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#280)
+
+**Inherited from**
+
+`CommonProps.style`
+
+***
+
+### w?
+
+> `optional` **w**: `number`
+
+Defined in: [src/react/anumaRuntime.tsx:164](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#164)
+
+**Inherited from**
+
+`CommonProps.w`
+
+***
+
+### x?
+
+> `optional` **x**: `number`
+
+Defined in: [src/react/anumaRuntime.tsx:162](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#162)
+
+**Inherited from**
+
+`CommonProps.x`
+
+***
+
+### y?
+
+> `optional` **y**: `number`
+
+Defined in: [src/react/anumaRuntime.tsx:163](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#163)
+
+**Inherited from**
+
+`CommonProps.y`
diff --git a/src/content/sdk/react/Internal/interfaces/ImageProps.md b/src/content/sdk/react/Internal/interfaces/ImageProps.md
new file mode 100644
index 00000000..284bdec2
--- /dev/null
+++ b/src/content/sdk/react/Internal/interfaces/ImageProps.md
@@ -0,0 +1,147 @@
+# ImageProps
+
+Defined in: [src/react/anumaRuntime.tsx:680](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#680)
+
+## Extends
+
+* `CommonProps`
+
+## Properties
+
+### alignSelf?
+
+> `optional` **alignSelf**: `string`
+
+Defined in: [src/react/anumaRuntime.tsx:169](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#169)
+
+**Inherited from**
+
+`CommonProps.alignSelf`
+
+***
+
+### children?
+
+> `optional` **children**: `ReactNode`
+
+Defined in: [src/react/anumaRuntime.tsx:281](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#281)
+
+**Inherited from**
+
+`CommonProps.children`
+
+***
+
+### grow?
+
+> `optional` **grow**: `number`
+
+Defined in: [src/react/anumaRuntime.tsx:167](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#167)
+
+**Inherited from**
+
+`CommonProps.grow`
+
+***
+
+### h?
+
+> `optional` **h**: `number`
+
+Defined in: [src/react/anumaRuntime.tsx:165](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#165)
+
+**Inherited from**
+
+`CommonProps.h`
+
+***
+
+### id?
+
+> `optional` **id**: `string`
+
+Defined in: [src/react/anumaRuntime.tsx:279](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#279)
+
+**Inherited from**
+
+`CommonProps.id`
+
+***
+
+### rotation?
+
+> `optional` **rotation**: `number`
+
+Defined in: [src/react/anumaRuntime.tsx:166](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#166)
+
+**Inherited from**
+
+`CommonProps.rotation`
+
+***
+
+### shrink?
+
+> `optional` **shrink**: `number`
+
+Defined in: [src/react/anumaRuntime.tsx:168](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#168)
+
+**Inherited from**
+
+`CommonProps.shrink`
+
+***
+
+### src?
+
+> `optional` **src**: `string`
+
+Defined in: [src/react/anumaRuntime.tsx:681](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#681)
+
+***
+
+### style?
+
+> `optional` **style**: `CSSProperties`
+
+Defined in: [src/react/anumaRuntime.tsx:280](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#280)
+
+**Inherited from**
+
+`CommonProps.style`
+
+***
+
+### w?
+
+> `optional` **w**: `number`
+
+Defined in: [src/react/anumaRuntime.tsx:164](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#164)
+
+**Inherited from**
+
+`CommonProps.w`
+
+***
+
+### x?
+
+> `optional` **x**: `number`
+
+Defined in: [src/react/anumaRuntime.tsx:162](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#162)
+
+**Inherited from**
+
+`CommonProps.x`
+
+***
+
+### y?
+
+> `optional` **y**: `number`
+
+Defined in: [src/react/anumaRuntime.tsx:163](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#163)
+
+**Inherited from**
+
+`CommonProps.y`
diff --git a/src/content/sdk/react/Internal/interfaces/LazyStoredConversation.md b/src/content/sdk/react/Internal/interfaces/LazyStoredConversation.md
new file mode 100644
index 00000000..3f6a03fa
--- /dev/null
+++ b/src/content/sdk/react/Internal/interfaces/LazyStoredConversation.md
@@ -0,0 +1,107 @@
+# LazyStoredConversation
+
+Defined in: [src/lib/db/chat/types.ts:183](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#183)
+
+Lazy variant of [StoredConversation](StoredConversation.md).
+
+Identical to `StoredConversation` except `title` is replaced with
+`encryptedTitle` — the raw value as persisted in WatermelonDB. The
+caller is responsible for decrypting the title when (and only when)
+the row is actually rendered, typically via `decryptConversationTitle`
+inside an IntersectionObserver callback or a virtualized list.
+
+For users with thousands of conversations this means plaintext titles
+for the off-screen rows never enter client RAM.
+
+The string in `encryptedTitle` may also be plaintext (legacy/unencrypted
+conversations); `decryptConversationTitle` handles both transparently.
+
+## Extends
+
+* `Omit`<[`StoredConversation`](StoredConversation.md), `"title"`>
+
+## Properties
+
+### conversationId
+
+> **conversationId**: `string`
+
+Defined in: [src/lib/db/chat/types.ts:159](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#159)
+
+**Inherited from**
+
+[`StoredConversation`](StoredConversation.md).[`conversationId`](StoredConversation.md#conversationid)
+
+***
+
+### createdAt
+
+> **createdAt**: `Date`
+
+Defined in: [src/lib/db/chat/types.ts:163](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#163)
+
+**Inherited from**
+
+[`StoredConversation`](StoredConversation.md).[`createdAt`](StoredConversation.md#createdat)
+
+***
+
+### encryptedTitle
+
+> **encryptedTitle**: `string`
+
+Defined in: [src/lib/db/chat/types.ts:189](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#189)
+
+Raw stored title — either ciphertext (`enc:v3:...`) or plaintext for
+legacy rows. Pass to `decryptConversationTitle(encryptedTitle, address)`
+when the row needs to be rendered.
+
+***
+
+### isDeleted
+
+> **isDeleted**: `boolean`
+
+Defined in: [src/lib/db/chat/types.ts:165](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#165)
+
+**Inherited from**
+
+[`StoredConversation`](StoredConversation.md).[`isDeleted`](StoredConversation.md#isdeleted)
+
+***
+
+### projectId?
+
+> `optional` **projectId**: `string`
+
+Defined in: [src/lib/db/chat/types.ts:162](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#162)
+
+Optional project ID this conversation belongs to
+
+**Inherited from**
+
+[`StoredConversation`](StoredConversation.md).[`projectId`](StoredConversation.md#projectid)
+
+***
+
+### uniqueId
+
+> **uniqueId**: `string`
+
+Defined in: [src/lib/db/chat/types.ts:158](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#158)
+
+**Inherited from**
+
+[`StoredConversation`](StoredConversation.md).[`uniqueId`](StoredConversation.md#uniqueid)
+
+***
+
+### updatedAt
+
+> **updatedAt**: `Date`
+
+Defined in: [src/lib/db/chat/types.ts:164](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#164)
+
+**Inherited from**
+
+[`StoredConversation`](StoredConversation.md).[`updatedAt`](StoredConversation.md#updatedat)
diff --git a/src/content/sdk/react/Internal/interfaces/LineProps.md b/src/content/sdk/react/Internal/interfaces/LineProps.md
new file mode 100644
index 00000000..855b032c
--- /dev/null
+++ b/src/content/sdk/react/Internal/interfaces/LineProps.md
@@ -0,0 +1,155 @@
+# LineProps
+
+Defined in: [src/react/anumaRuntime.tsx:594](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#594)
+
+## Extends
+
+* `CommonProps`
+
+## Properties
+
+### alignSelf?
+
+> `optional` **alignSelf**: `string`
+
+Defined in: [src/react/anumaRuntime.tsx:169](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#169)
+
+**Inherited from**
+
+`CommonProps.alignSelf`
+
+***
+
+### children?
+
+> `optional` **children**: `ReactNode`
+
+Defined in: [src/react/anumaRuntime.tsx:281](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#281)
+
+**Inherited from**
+
+`CommonProps.children`
+
+***
+
+### grow?
+
+> `optional` **grow**: `number`
+
+Defined in: [src/react/anumaRuntime.tsx:167](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#167)
+
+**Inherited from**
+
+`CommonProps.grow`
+
+***
+
+### h?
+
+> `optional` **h**: `number`
+
+Defined in: [src/react/anumaRuntime.tsx:165](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#165)
+
+**Inherited from**
+
+`CommonProps.h`
+
+***
+
+### id?
+
+> `optional` **id**: `string`
+
+Defined in: [src/react/anumaRuntime.tsx:279](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#279)
+
+**Inherited from**
+
+`CommonProps.id`
+
+***
+
+### rotation?
+
+> `optional` **rotation**: `number`
+
+Defined in: [src/react/anumaRuntime.tsx:166](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#166)
+
+**Inherited from**
+
+`CommonProps.rotation`
+
+***
+
+### shrink?
+
+> `optional` **shrink**: `number`
+
+Defined in: [src/react/anumaRuntime.tsx:168](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#168)
+
+**Inherited from**
+
+`CommonProps.shrink`
+
+***
+
+### stroke?
+
+> `optional` **stroke**: `string`
+
+Defined in: [src/react/anumaRuntime.tsx:595](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#595)
+
+***
+
+### strokeWidth?
+
+> `optional` **strokeWidth**: `number`
+
+Defined in: [src/react/anumaRuntime.tsx:596](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#596)
+
+***
+
+### style?
+
+> `optional` **style**: `CSSProperties`
+
+Defined in: [src/react/anumaRuntime.tsx:280](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#280)
+
+**Inherited from**
+
+`CommonProps.style`
+
+***
+
+### w?
+
+> `optional` **w**: `number`
+
+Defined in: [src/react/anumaRuntime.tsx:164](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#164)
+
+**Inherited from**
+
+`CommonProps.w`
+
+***
+
+### x?
+
+> `optional` **x**: `number`
+
+Defined in: [src/react/anumaRuntime.tsx:162](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#162)
+
+**Inherited from**
+
+`CommonProps.x`
+
+***
+
+### y?
+
+> `optional` **y**: `number`
+
+Defined in: [src/react/anumaRuntime.tsx:163](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#163)
+
+**Inherited from**
+
+`CommonProps.y`
diff --git a/src/content/sdk/react/Internal/interfaces/MemoryEngineResult.md b/src/content/sdk/react/Internal/interfaces/MemoryEngineResult.md
index 8ac6695f..f3a9673d 100644
--- a/src/content/sdk/react/Internal/interfaces/MemoryEngineResult.md
+++ b/src/content/sdk/react/Internal/interfaces/MemoryEngineResult.md
@@ -38,7 +38,7 @@ When the message was created
### role
-> **role**: `"assistant"` | `"user"`
+> **role**: `"user"` | `"assistant"`
Defined in: [src/lib/memoryEngine/types.ts:43](https://github.com/anuma-ai/sdk/blob/main/src/lib/memoryEngine/types.ts#43)
diff --git a/src/content/sdk/react/Internal/interfaces/MessageChunk.md b/src/content/sdk/react/Internal/interfaces/MessageChunk.md
index c30498a5..d1475090 100644
--- a/src/content/sdk/react/Internal/interfaces/MessageChunk.md
+++ b/src/content/sdk/react/Internal/interfaces/MessageChunk.md
@@ -1,6 +1,6 @@
# MessageChunk
-Defined in: [src/lib/db/chat/types.ts:196](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#196)
+Defined in: [src/lib/db/chat/types.ts:221](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#221)
A chunk of a message with its own embedding for fine-grained search
@@ -10,7 +10,7 @@ A chunk of a message with its own embedding for fine-grained search
> **endOffset**: `number`
-Defined in: [src/lib/db/chat/types.ts:204](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#204)
+Defined in: [src/lib/db/chat/types.ts:229](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#229)
Character offset where this chunk ends in the original message
@@ -20,7 +20,7 @@ Character offset where this chunk ends in the original message
> **startOffset**: `number`
-Defined in: [src/lib/db/chat/types.ts:202](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#202)
+Defined in: [src/lib/db/chat/types.ts:227](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#227)
Character offset where this chunk starts in the original message
@@ -30,7 +30,7 @@ Character offset where this chunk starts in the original message
> **text**: `string`
-Defined in: [src/lib/db/chat/types.ts:198](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#198)
+Defined in: [src/lib/db/chat/types.ts:223](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#223)
The chunk text
@@ -40,6 +40,6 @@ The chunk text
> **vector**: `number`\[]
-Defined in: [src/lib/db/chat/types.ts:200](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#200)
+Defined in: [src/lib/db/chat/types.ts:225](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#225)
Embedding vector for this chunk
diff --git a/src/content/sdk/react/Internal/interfaces/QuantizedEmbedding.md b/src/content/sdk/react/Internal/interfaces/QuantizedEmbedding.md
new file mode 100644
index 00000000..6e5740dc
--- /dev/null
+++ b/src/content/sdk/react/Internal/interfaces/QuantizedEmbedding.md
@@ -0,0 +1,28 @@
+# QuantizedEmbedding
+
+Defined in: [src/lib/memoryEngine/quantization.ts:32](https://github.com/anuma-ai/sdk/blob/main/src/lib/memoryEngine/quantization.ts#32)
+
+Result of quantizing a Float32 / number\[] embedding to Int8.
+
+`data` holds the quantized values in \[-127, 127].
+`scale` is the per-vector Float32 scaling factor; multiplying a
+dequantized Int8 value by `scale / 127` recovers the original.
+
+The Int8Array does not own a separate ArrayBuffer copy beyond the
+one allocated here, and is plain transferable storage.
+
+## Properties
+
+### data
+
+> **data**: `Int8Array`
+
+Defined in: [src/lib/memoryEngine/quantization.ts:33](https://github.com/anuma-ai/sdk/blob/main/src/lib/memoryEngine/quantization.ts#33)
+
+***
+
+### scale
+
+> **scale**: `number`
+
+Defined in: [src/lib/memoryEngine/quantization.ts:34](https://github.com/anuma-ai/sdk/blob/main/src/lib/memoryEngine/quantization.ts#34)
diff --git a/src/content/sdk/react/Internal/interfaces/RectProps.md b/src/content/sdk/react/Internal/interfaces/RectProps.md
new file mode 100644
index 00000000..ff816ecf
--- /dev/null
+++ b/src/content/sdk/react/Internal/interfaces/RectProps.md
@@ -0,0 +1,171 @@
+# RectProps
+
+Defined in: [src/react/anumaRuntime.tsx:516](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#516)
+
+## Extends
+
+* `CommonProps`
+
+## Properties
+
+### alignSelf?
+
+> `optional` **alignSelf**: `string`
+
+Defined in: [src/react/anumaRuntime.tsx:169](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#169)
+
+**Inherited from**
+
+`CommonProps.alignSelf`
+
+***
+
+### children?
+
+> `optional` **children**: `ReactNode`
+
+Defined in: [src/react/anumaRuntime.tsx:281](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#281)
+
+**Inherited from**
+
+`CommonProps.children`
+
+***
+
+### cornerRadius?
+
+> `optional` **cornerRadius**: `number`
+
+Defined in: [src/react/anumaRuntime.tsx:520](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#520)
+
+***
+
+### fill?
+
+> `optional` **fill**: `string`
+
+Defined in: [src/react/anumaRuntime.tsx:517](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#517)
+
+***
+
+### grow?
+
+> `optional` **grow**: `number`
+
+Defined in: [src/react/anumaRuntime.tsx:167](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#167)
+
+**Inherited from**
+
+`CommonProps.grow`
+
+***
+
+### h?
+
+> `optional` **h**: `number`
+
+Defined in: [src/react/anumaRuntime.tsx:165](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#165)
+
+**Inherited from**
+
+`CommonProps.h`
+
+***
+
+### id?
+
+> `optional` **id**: `string`
+
+Defined in: [src/react/anumaRuntime.tsx:279](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#279)
+
+**Inherited from**
+
+`CommonProps.id`
+
+***
+
+### rotation?
+
+> `optional` **rotation**: `number`
+
+Defined in: [src/react/anumaRuntime.tsx:166](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#166)
+
+**Inherited from**
+
+`CommonProps.rotation`
+
+***
+
+### shrink?
+
+> `optional` **shrink**: `number`
+
+Defined in: [src/react/anumaRuntime.tsx:168](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#168)
+
+**Inherited from**
+
+`CommonProps.shrink`
+
+***
+
+### stroke?
+
+> `optional` **stroke**: `string`
+
+Defined in: [src/react/anumaRuntime.tsx:518](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#518)
+
+***
+
+### strokeWidth?
+
+> `optional` **strokeWidth**: `number`
+
+Defined in: [src/react/anumaRuntime.tsx:519](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#519)
+
+***
+
+### style?
+
+> `optional` **style**: `CSSProperties`
+
+Defined in: [src/react/anumaRuntime.tsx:280](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#280)
+
+**Inherited from**
+
+`CommonProps.style`
+
+***
+
+### w?
+
+> `optional` **w**: `number`
+
+Defined in: [src/react/anumaRuntime.tsx:164](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#164)
+
+**Inherited from**
+
+`CommonProps.w`
+
+***
+
+### x?
+
+> `optional` **x**: `number`
+
+Defined in: [src/react/anumaRuntime.tsx:162](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#162)
+
+**Inherited from**
+
+`CommonProps.x`
+
+***
+
+### y?
+
+> `optional` **y**: `number`
+
+Defined in: [src/react/anumaRuntime.tsx:163](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#163)
+
+**Inherited from**
+
+`CommonProps.y`
diff --git a/src/content/sdk/react/Internal/interfaces/ScreenProps.md b/src/content/sdk/react/Internal/interfaces/ScreenProps.md
new file mode 100644
index 00000000..728c3f17
--- /dev/null
+++ b/src/content/sdk/react/Internal/interfaces/ScreenProps.md
@@ -0,0 +1,226 @@
+# ScreenProps
+
+Defined in: [src/react/anumaRuntime.tsx:412](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#412)
+
+App-mockup screen container. Like Slide but with configurable
+dimensions (width/height default to a mobile preset).
+
+## Extends
+
+* `CommonProps`.`ContainerLayoutProps`
+
+## Properties
+
+### align?
+
+> `optional` **align**: `string`
+
+Defined in: [src/react/anumaRuntime.tsx:177](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#177)
+
+**Inherited from**
+
+`ContainerLayoutProps.align`
+
+***
+
+### alignSelf?
+
+> `optional` **alignSelf**: `string`
+
+Defined in: [src/react/anumaRuntime.tsx:169](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#169)
+
+**Inherited from**
+
+`CommonProps.alignSelf`
+
+***
+
+### background?
+
+> `optional` **background**: `string`
+
+Defined in: [src/react/anumaRuntime.tsx:413](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#413)
+
+***
+
+### children?
+
+> `optional` **children**: `ReactNode`
+
+Defined in: [src/react/anumaRuntime.tsx:281](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#281)
+
+**Inherited from**
+
+`CommonProps.children`
+
+***
+
+### gap?
+
+> `optional` **gap**: `number`
+
+Defined in: [src/react/anumaRuntime.tsx:174](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#174)
+
+**Inherited from**
+
+`ContainerLayoutProps.gap`
+
+***
+
+### grow?
+
+> `optional` **grow**: `number`
+
+Defined in: [src/react/anumaRuntime.tsx:167](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#167)
+
+**Inherited from**
+
+`CommonProps.grow`
+
+***
+
+### h?
+
+> `optional` **h**: `number`
+
+Defined in: [src/react/anumaRuntime.tsx:165](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#165)
+
+**Inherited from**
+
+`CommonProps.h`
+
+***
+
+### height?
+
+> `optional` **height**: `number`
+
+Defined in: [src/react/anumaRuntime.tsx:415](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#415)
+
+***
+
+### id?
+
+> `optional` **id**: `string`
+
+Defined in: [src/react/anumaRuntime.tsx:279](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#279)
+
+**Inherited from**
+
+`CommonProps.id`
+
+***
+
+### justify?
+
+> `optional` **justify**: `string`
+
+Defined in: [src/react/anumaRuntime.tsx:176](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#176)
+
+**Inherited from**
+
+`ContainerLayoutProps.justify`
+
+***
+
+### layout?
+
+> `optional` **layout**: `string`
+
+Defined in: [src/react/anumaRuntime.tsx:173](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#173)
+
+**Inherited from**
+
+`ContainerLayoutProps.layout`
+
+***
+
+### padding?
+
+> `optional` **padding**: `number`
+
+Defined in: [src/react/anumaRuntime.tsx:175](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#175)
+
+**Inherited from**
+
+`ContainerLayoutProps.padding`
+
+***
+
+### rotation?
+
+> `optional` **rotation**: `number`
+
+Defined in: [src/react/anumaRuntime.tsx:166](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#166)
+
+**Inherited from**
+
+`CommonProps.rotation`
+
+***
+
+### shrink?
+
+> `optional` **shrink**: `number`
+
+Defined in: [src/react/anumaRuntime.tsx:168](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#168)
+
+**Inherited from**
+
+`CommonProps.shrink`
+
+***
+
+### style?
+
+> `optional` **style**: `CSSProperties`
+
+Defined in: [src/react/anumaRuntime.tsx:280](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#280)
+
+**Inherited from**
+
+`CommonProps.style`
+
+***
+
+### w?
+
+> `optional` **w**: `number`
+
+Defined in: [src/react/anumaRuntime.tsx:164](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#164)
+
+**Inherited from**
+
+`CommonProps.w`
+
+***
+
+### width?
+
+> `optional` **width**: `number`
+
+Defined in: [src/react/anumaRuntime.tsx:414](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#414)
+
+***
+
+### x?
+
+> `optional` **x**: `number`
+
+Defined in: [src/react/anumaRuntime.tsx:162](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#162)
+
+**Inherited from**
+
+`CommonProps.x`
+
+***
+
+### y?
+
+> `optional` **y**: `number`
+
+Defined in: [src/react/anumaRuntime.tsx:163](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#163)
+
+**Inherited from**
+
+`CommonProps.y`
diff --git a/src/content/sdk/react/Internal/interfaces/SearchMessagesOptions.md b/src/content/sdk/react/Internal/interfaces/SearchMessagesOptions.md
index c7062a50..0113beba 100644
--- a/src/content/sdk/react/Internal/interfaces/SearchMessagesOptions.md
+++ b/src/content/sdk/react/Internal/interfaces/SearchMessagesOptions.md
@@ -1,6 +1,6 @@
# SearchMessagesOptions
-Defined in: [src/react/useChatStorage.ts:579](https://github.com/anuma-ai/sdk/blob/main/src/react/useChatStorage.ts#579)
+Defined in: [src/react/useChatStorage.ts:746](https://github.com/anuma-ai/sdk/blob/main/src/react/useChatStorage.ts#746)
Options for searching messages
@@ -10,7 +10,7 @@ Options for searching messages
> `optional` **conversationId**: `string`
-Defined in: [src/react/useChatStorage.ts:585](https://github.com/anuma-ai/sdk/blob/main/src/react/useChatStorage.ts#585)
+Defined in: [src/react/useChatStorage.ts:752](https://github.com/anuma-ai/sdk/blob/main/src/react/useChatStorage.ts#752)
Filter by conversation ID
@@ -20,7 +20,7 @@ Filter by conversation ID
> `optional` **limit**: `number`
-Defined in: [src/react/useChatStorage.ts:581](https://github.com/anuma-ai/sdk/blob/main/src/react/useChatStorage.ts#581)
+Defined in: [src/react/useChatStorage.ts:748](https://github.com/anuma-ai/sdk/blob/main/src/react/useChatStorage.ts#748)
Limit the number of results (default: 10)
@@ -30,6 +30,6 @@ Limit the number of results (default: 10)
> `optional` **minSimilarity**: `number`
-Defined in: [src/react/useChatStorage.ts:583](https://github.com/anuma-ai/sdk/blob/main/src/react/useChatStorage.ts#583)
+Defined in: [src/react/useChatStorage.ts:750](https://github.com/anuma-ai/sdk/blob/main/src/react/useChatStorage.ts#750)
Minimum similarity threshold (default: 0.5)
diff --git a/src/content/sdk/react/Internal/interfaces/SearchSource.md b/src/content/sdk/react/Internal/interfaces/SearchSource.md
index 1e3d71a5..d5560d94 100644
--- a/src/content/sdk/react/Internal/interfaces/SearchSource.md
+++ b/src/content/sdk/react/Internal/interfaces/SearchSource.md
@@ -1,6 +1,6 @@
# SearchSource
-Defined in: [src/lib/db/chat/types.ts:105](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#105)
+Defined in: [src/lib/db/chat/types.ts:106](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#106)
## Properties
@@ -8,7 +8,7 @@ Defined in: [src/lib/db/chat/types.ts:105](https://github.com/anuma-ai/sdk/blob/
> `optional` **date**: `string`
-Defined in: [src/lib/db/chat/types.ts:109](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#109)
+Defined in: [src/lib/db/chat/types.ts:110](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#110)
***
@@ -16,7 +16,7 @@ Defined in: [src/lib/db/chat/types.ts:109](https://github.com/anuma-ai/sdk/blob/
> `optional` **snippet**: `string`
-Defined in: [src/lib/db/chat/types.ts:108](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#108)
+Defined in: [src/lib/db/chat/types.ts:109](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#109)
***
@@ -24,7 +24,7 @@ Defined in: [src/lib/db/chat/types.ts:108](https://github.com/anuma-ai/sdk/blob/
> `optional` **title**: `string`
-Defined in: [src/lib/db/chat/types.ts:106](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#106)
+Defined in: [src/lib/db/chat/types.ts:107](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#107)
***
@@ -32,4 +32,4 @@ Defined in: [src/lib/db/chat/types.ts:106](https://github.com/anuma-ai/sdk/blob/
> `optional` **url**: `string`
-Defined in: [src/lib/db/chat/types.ts:107](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#107)
+Defined in: [src/lib/db/chat/types.ts:108](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#108)
diff --git a/src/content/sdk/react/Internal/interfaces/SelectServerToolsForPromptOptions.md b/src/content/sdk/react/Internal/interfaces/SelectServerToolsForPromptOptions.md
new file mode 100644
index 00000000..cb130494
--- /dev/null
+++ b/src/content/sdk/react/Internal/interfaces/SelectServerToolsForPromptOptions.md
@@ -0,0 +1,72 @@
+# SelectServerToolsForPromptOptions
+
+Defined in: [src/lib/tools/serverTools.ts:1131](https://github.com/anuma-ai/sdk/blob/main/src/lib/tools/serverTools.ts#1131)
+
+Options for `selectServerToolsForPrompt`.
+
+## Properties
+
+### baseUrl?
+
+> `optional` **baseUrl**: `string`
+
+Defined in: [src/lib/tools/serverTools.ts:1144](https://github.com/anuma-ai/sdk/blob/main/src/lib/tools/serverTools.ts#1144)
+
+Base URL for the API.
+
+***
+
+### cacheExpirationMs?
+
+> `optional` **cacheExpirationMs**: `number`
+
+Defined in: [src/lib/tools/serverTools.ts:1148](https://github.com/anuma-ai/sdk/blob/main/src/lib/tools/serverTools.ts#1148)
+
+Cache expiration in ms for the server-tools catalog fetch.
+
+***
+
+### embeddingModel?
+
+> `optional` **embeddingModel**: `string`
+
+Defined in: [src/lib/tools/serverTools.ts:1146](https://github.com/anuma-ai/sdk/blob/main/src/lib/tools/serverTools.ts#1146)
+
+Embedding model override. Falls back to the SDK default.
+
+***
+
+### getToken()
+
+> **getToken**: () => `Promise`<`string` | `null`>
+
+Defined in: [src/lib/tools/serverTools.ts:1142](https://github.com/anuma-ai/sdk/blob/main/src/lib/tools/serverTools.ts#1142)
+
+Function that resolves an auth token (Bearer).
+
+**Returns**
+
+`Promise`<`string` | `null`>
+
+***
+
+### prompt
+
+> **prompt**: `string`
+
+Defined in: [src/lib/tools/serverTools.ts:1133](https://github.com/anuma-ai/sdk/blob/main/src/lib/tools/serverTools.ts#1133)
+
+User prompt to match tools against.
+
+***
+
+### serverToolsFilter?
+
+> `optional` **serverToolsFilter**: `string`\[] | [`ServerToolsFilterFunction`](../type-aliases/ServerToolsFilterFunction.md)
+
+Defined in: [src/lib/tools/serverTools.ts:1140](https://github.com/anuma-ai/sdk/blob/main/src/lib/tools/serverTools.ts#1140)
+
+Filter to apply: either a function (called with the prompt embedding +
+full catalog) or a static list of tool names. Same shape `useChatStorage`
+accepts on its `serverTools` option. Pass `defaultServerToolsFilter` to
+mirror the default chat-flow selection.
diff --git a/src/content/sdk/react/Internal/interfaces/SendMessageWithStorageArgs.md b/src/content/sdk/react/Internal/interfaces/SendMessageWithStorageArgs.md
index 713c4843..c50fa129 100644
--- a/src/content/sdk/react/Internal/interfaces/SendMessageWithStorageArgs.md
+++ b/src/content/sdk/react/Internal/interfaces/SendMessageWithStorageArgs.md
@@ -1,6 +1,6 @@
# SendMessageWithStorageArgs
-Defined in: [src/react/useChatStorage.ts:523](https://github.com/anuma-ai/sdk/blob/main/src/react/useChatStorage.ts#523)
+Defined in: [src/react/useChatStorage.ts:690](https://github.com/anuma-ai/sdk/blob/main/src/react/useChatStorage.ts#690)
Arguments for sendMessage with storage (React version)
@@ -16,7 +16,7 @@ Extends base arguments with headers and apiType support.
> `optional` **apiType**: `ApiType`
-Defined in: [src/react/useChatStorage.ts:537](https://github.com/anuma-ai/sdk/blob/main/src/react/useChatStorage.ts#537)
+Defined in: [src/react/useChatStorage.ts:704](https://github.com/anuma-ai/sdk/blob/main/src/react/useChatStorage.ts#704)
Override the API type for this specific request.
@@ -27,11 +27,29 @@ Useful when different models need different APIs within the same hook instance.
***
+### assistantUniqueId?
+
+> `optional` **assistantUniqueId**: `string`
+
+Defined in: [src/lib/db/chat/types.ts:735](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#735)
+
+Pre-generated unique ID for the assistant response message.
+When provided, the persisted assistant message will use this ID instead of
+an auto-generated one. This lets the consumer show an in-flight streaming
+placeholder under the same React key, avoiding an unmount/remount flash
+when streaming completes and the message is loaded from the database.
+
+**Inherited from**
+
+`BaseSendMessageWithStorageArgs.assistantUniqueId`
+
+***
+
### clientTools?
> `optional` **clientTools**: [`LlmapiChatCompletionTool`](../../../client/Internal/type-aliases/LlmapiChatCompletionTool.md)\[]
-Defined in: [src/lib/db/chat/types.ts:603](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#603)
+Defined in: [src/lib/db/chat/types.ts:645](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#645)
Client-side tools with optional executors.
These tools run in the browser/app and can have JavaScript executor functions.
@@ -46,7 +64,7 @@ These tools run in the browser/app and can have JavaScript executor functions.
> `optional` **clientToolsFilter**: [`ClientToolsFilterFn`](../type-aliases/ClientToolsFilterFn.md)
-Defined in: [src/lib/db/chat/types.ts:640](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#640)
+Defined in: [src/lib/db/chat/types.ts:682](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#682)
Dynamic filter for client-side tools based on prompt embeddings.
Receives the prompt embedding(s) (or null for short messages) and all client tools,
@@ -72,7 +90,7 @@ clientToolsFilter: (embeddings, tools) => {
> `optional` **conversationId**: `string`
-Defined in: [src/react/useChatStorage.ts:545](https://github.com/anuma-ai/sdk/blob/main/src/react/useChatStorage.ts#545)
+Defined in: [src/react/useChatStorage.ts:712](https://github.com/anuma-ai/sdk/blob/main/src/react/useChatStorage.ts#712)
Explicitly specify the conversation ID to send this message to.
If provided, bypasses the automatic conversation detection/creation.
@@ -85,7 +103,7 @@ to avoid race conditions with React state updates.
> `optional` **fileContext**: `string`
-Defined in: [src/lib/db/chat/types.ts:558](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#558)
+Defined in: [src/lib/db/chat/types.ts:600](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#600)
Additional context from preprocessed file attachments.
Contains extracted text from Excel, Word, PDF, and other document files.
@@ -101,7 +119,7 @@ Injected as a system message so it's available throughout the conversation.
> `optional` **files**: [`FileMetadata`](FileMetadata.md)\[]
-Defined in: [src/lib/db/chat/types.ts:532](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#532)
+Defined in: [src/lib/db/chat/types.ts:574](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#574)
File attachments to include with the message (images, documents, etc.).
Files with image MIME types and URLs are sent as image content parts.
@@ -117,7 +135,7 @@ File metadata is stored with the message (URLs are stripped if they're data URIs
> `optional` **getThoughtProcess**: () => `ActivityPhase`\[]
-Defined in: [src/lib/db/chat/types.ts:583](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#583)
+Defined in: [src/lib/db/chat/types.ts:625](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#625)
Callback to get activity phases AFTER streaming completes.
Use this instead of `thoughtProcess` when phases are added dynamically during streaming
@@ -139,7 +157,7 @@ If both `thoughtProcess` and `getThoughtProcess` are provided, `getThoughtProces
> `optional` **headers**: `Record`<`string`, `string`>
-Defined in: [src/react/useChatStorage.ts:528](https://github.com/anuma-ai/sdk/blob/main/src/react/useChatStorage.ts#528)
+Defined in: [src/react/useChatStorage.ts:695](https://github.com/anuma-ai/sdk/blob/main/src/react/useChatStorage.ts#695)
Custom HTTP headers to include with the API request.
Useful for passing additional authentication, tracking, or feature flags.
@@ -150,7 +168,7 @@ Useful for passing additional authentication, tracking, or feature flags.
> `optional` **imageModel**: `string`
-Defined in: [src/lib/db/chat/types.ts:674](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#674)
+Defined in: [src/lib/db/chat/types.ts:716](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#716)
User-selected image generation model for server-side enforcement.
@@ -164,7 +182,7 @@ User-selected image generation model for server-side enforcement.
> `optional` **includeHistory**: `boolean`
-Defined in: [src/lib/db/chat/types.ts:467](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#467)
+Defined in: [src/lib/db/chat/types.ts:509](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#509)
Whether to automatically include previous messages from the conversation as context.
When true, fetches stored messages and prepends them to the request.
@@ -186,7 +204,7 @@ true
> `optional` **maxHistoryMessages**: `number`
-Defined in: [src/lib/db/chat/types.ts:474](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#474)
+Defined in: [src/lib/db/chat/types.ts:516](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#516)
Maximum number of historical messages to include when `includeHistory` is true.
Only the most recent N messages are included to manage context window size.
@@ -207,7 +225,7 @@ Only the most recent N messages are included to manage context window size.
> `optional` **maxOutputTokens**: `number`
-Defined in: [src/lib/db/chat/types.ts:597](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#597)
+Defined in: [src/lib/db/chat/types.ts:639](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#639)
Maximum number of tokens to generate in the response.
Use this to limit response length and control costs.
@@ -222,7 +240,7 @@ Use this to limit response length and control costs.
> `optional` **maxToolRounds**: `number`
-Defined in: [src/lib/db/chat/types.ts:658](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#658)
+Defined in: [src/lib/db/chat/types.ts:700](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#700)
Maximum number of tool execution rounds before forcing the model to respond with text.
After this many rounds, `toolChoice` is set to `"none"` on the next continuation,
@@ -244,7 +262,7 @@ so the model produces a text answer using whatever tool results it has gathered.
> `optional` **memoryContext**: `string`
-Defined in: [src/lib/db/chat/types.ts:545](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#545)
+Defined in: [src/lib/db/chat/types.ts:587](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#587)
Additional context from memory/RAG system to include in the request.
Typically contains retrieved relevant information from past conversations.
@@ -259,7 +277,7 @@ Typically contains retrieved relevant information from past conversations.
> **messages**: [`LlmapiMessage`](../../../client/Internal/type-aliases/LlmapiMessage.md)\[]
-Defined in: [src/lib/db/chat/types.ts:427](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#427)
+Defined in: [src/lib/db/chat/types.ts:469](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#469)
The message array to send to the AI.
@@ -309,9 +327,9 @@ sendMessage({
> `optional` **model**: `string`
-Defined in: [src/lib/db/chat/types.ts:433](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#433)
+Defined in: [src/lib/db/chat/types.ts:475](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#475)
-The model identifier to use for this request (e.g., "gpt-4o", "claude-sonnet-4-20250514").
+The model identifier to use for this request (e.g., "fireworks/accounts/fireworks/models/kimi-k2p5").
If not specified, uses the default model configured on the server.
**Inherited from**
@@ -324,7 +342,7 @@ If not specified, uses the default model configured on the server.
> `optional` **onData**: (`chunk`: `string`) => `void`
-Defined in: [src/lib/db/chat/types.ts:539](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#539)
+Defined in: [src/lib/db/chat/types.ts:581](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#581)
Per-request callback invoked with each streamed response chunk.
Overrides the hook-level `onData` callback for this request only.
@@ -369,7 +387,7 @@ Use this to update UI as the response streams in.
> `optional` **onThinking**: (`chunk`: `string`) => `void`
-Defined in: [src/lib/db/chat/types.ts:681](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#681)
+Defined in: [src/lib/db/chat/types.ts:723](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#723)
Per-request callback for thinking/reasoning chunks.
Called with delta chunks as the model "thinks" through a problem.
@@ -414,7 +432,7 @@ Use this to display thinking progress in the UI.
> `optional` **parentMessageId**: `string`
-Defined in: [src/lib/db/chat/types.ts:684](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#684)
+Defined in: [src/lib/db/chat/types.ts:726](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#726)
Parent message ID for branching (edit/regenerate). Sets on the user message.
@@ -428,7 +446,7 @@ Parent message ID for branching (edit/regenerate). Sets on the user message.
> `optional` **reasoning**: [`LlmapiResponseReasoning`](../../../client/Internal/type-aliases/LlmapiResponseReasoning.md)
-Defined in: [src/lib/db/chat/types.ts:664](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#664)
+Defined in: [src/lib/db/chat/types.ts:706](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#706)
Reasoning configuration for o-series and other reasoning models.
Controls reasoning effort level and whether to include reasoning summary.
@@ -443,7 +461,7 @@ Controls reasoning effort level and whether to include reasoning summary.
> `optional` **searchContext**: `string`
-Defined in: [src/lib/db/chat/types.ts:551](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#551)
+Defined in: [src/lib/db/chat/types.ts:593](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#593)
Additional context from search results to include in the request.
Typically contains relevant information from web or document searches.
@@ -458,7 +476,7 @@ Typically contains relevant information from web or document searches.
> `optional` **serverTools**: [`ServerToolsFilter`](../type-aliases/ServerToolsFilter.md)
-Defined in: [src/lib/db/chat/types.ts:626](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#626)
+Defined in: [src/lib/db/chat/types.ts:668](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#668)
Server-side tools to include from /api/v1/tools.
@@ -494,7 +512,7 @@ serverTools: (embeddings, tools) => {
> `optional` **skipStorage**: `boolean`
-Defined in: [src/lib/db/chat/types.ts:459](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#459)
+Defined in: [src/lib/db/chat/types.ts:501](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#501)
Skip all storage operations (conversation, messages, embeddings, media).
Use this for one-off tasks like title generation where you don't want
@@ -535,7 +553,7 @@ const { data } = await sendMessage({
> `optional` **sources**: [`SearchSource`](SearchSource.md)\[]
-Defined in: [src/lib/db/chat/types.ts:564](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#564)
+Defined in: [src/lib/db/chat/types.ts:606](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#606)
Search sources to attach to the stored message for citation/reference.
Note: Sources are also automatically extracted from tool\_call\_events in the response.
@@ -550,7 +568,7 @@ Note: Sources are also automatically extracted from tool\_call\_events in the re
> `optional` **summarizeHistory**: `boolean`
-Defined in: [src/lib/db/chat/types.ts:488](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#488)
+Defined in: [src/lib/db/chat/types.ts:530](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#530)
Enable progressive summarization of conversation history.
@@ -577,7 +595,7 @@ false
> `optional` **summaryMinWindowMessages**: `number`
-Defined in: [src/lib/db/chat/types.ts:517](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#517)
+Defined in: [src/lib/db/chat/types.ts:559](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#559)
Minimum number of recent messages to always keep verbatim (never summarized).
Ensures the LLM always has immediate conversational context.
@@ -599,7 +617,7 @@ Even if these messages exceed the token threshold, they are kept.
> `optional` **summaryModel**: `string`
-Defined in: [src/lib/db/chat/types.ts:525](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#525)
+Defined in: [src/lib/db/chat/types.ts:567](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#567)
Model to use for generating conversation summaries.
Should be a cheap, fast model since summarization is a straightforward task.
@@ -620,7 +638,7 @@ Should be a cheap, fast model since summarization is a straightforward task.
> `optional` **summaryTokenThreshold**: `number`
-Defined in: [src/lib/db/chat/types.ts:508](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#508)
+Defined in: [src/lib/db/chat/types.ts:550](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#550)
Token threshold for conversation history before summarization triggers.
@@ -654,7 +672,7 @@ included — it is additive. Total input ≈ overhead + threshold + current mess
> `optional` **temperature**: `number`
-Defined in: [src/lib/db/chat/types.ts:591](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#591)
+Defined in: [src/lib/db/chat/types.ts:633](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#633)
Controls randomness in the response (0.0 to 2.0).
Lower values make output more deterministic, higher values more creative.
@@ -669,7 +687,7 @@ Lower values make output more deterministic, higher values more creative.
> `optional` **thinking**: [`LlmapiThinkingOptions`](../../../client/Internal/type-aliases/LlmapiThinkingOptions.md)
-Defined in: [src/lib/db/chat/types.ts:671](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#671)
+Defined in: [src/lib/db/chat/types.ts:713](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#713)
Extended thinking configuration for Anthropic models (Claude).
Enables the model to think through complex problems step by step
@@ -685,7 +703,7 @@ before generating the final response.
> `optional` **thoughtProcess**: `ActivityPhase`\[]
-Defined in: [src/lib/db/chat/types.ts:574](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#574)
+Defined in: [src/lib/db/chat/types.ts:616](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#616)
Activity phases for tracking the request lifecycle in the UI.
Each phase represents a step like "Searching", "Thinking", "Generating".
@@ -704,7 +722,7 @@ use `getThoughtProcess` callback instead, which captures phases AFTER streaming
> `optional` **toolChoice**: `string`
-Defined in: [src/lib/db/chat/types.ts:650](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#650)
+Defined in: [src/lib/db/chat/types.ts:692](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#692)
Controls which tool the model should use:
diff --git a/src/content/sdk/react/Internal/interfaces/SignMessageOptions.md b/src/content/sdk/react/Internal/interfaces/SignMessageOptions.md
index 3b850dfe..1fa36342 100644
--- a/src/content/sdk/react/Internal/interfaces/SignMessageOptions.md
+++ b/src/content/sdk/react/Internal/interfaces/SignMessageOptions.md
@@ -1,6 +1,6 @@
# SignMessageOptions
-Defined in: [src/react/useEncryption.ts:695](https://github.com/anuma-ai/sdk/blob/main/src/react/useEncryption.ts#695)
+Defined in: [src/react/useEncryption.ts:829](https://github.com/anuma-ai/sdk/blob/main/src/react/useEncryption.ts#829)
Options for signing messages.
@@ -10,6 +10,6 @@ Options for signing messages.
> `optional` **showWalletUIs**: `boolean`
-Defined in: [src/react/useEncryption.ts:697](https://github.com/anuma-ai/sdk/blob/main/src/react/useEncryption.ts#697)
+Defined in: [src/react/useEncryption.ts:831](https://github.com/anuma-ai/sdk/blob/main/src/react/useEncryption.ts#831)
Whether to show wallet UI during signing. Default: true
diff --git a/src/content/sdk/react/Internal/interfaces/SlideProps.md b/src/content/sdk/react/Internal/interfaces/SlideProps.md
new file mode 100644
index 00000000..4aac8021
--- /dev/null
+++ b/src/content/sdk/react/Internal/interfaces/SlideProps.md
@@ -0,0 +1,211 @@
+# SlideProps
+
+Defined in: [src/react/anumaRuntime.tsx:331](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#331)
+
+A 960×540 slide canvas. Positioned children with `x`/`y`/`w`/`h` get
+absolute positioning automatically. Opt into flex layout via
+`layout="row" | "column"`.
+
+## Extends
+
+* `CommonProps`.`ContainerLayoutProps`
+
+## Properties
+
+### align?
+
+> `optional` **align**: `string`
+
+Defined in: [src/react/anumaRuntime.tsx:177](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#177)
+
+**Inherited from**
+
+`ContainerLayoutProps.align`
+
+***
+
+### alignSelf?
+
+> `optional` **alignSelf**: `string`
+
+Defined in: [src/react/anumaRuntime.tsx:169](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#169)
+
+**Inherited from**
+
+`CommonProps.alignSelf`
+
+***
+
+### background?
+
+> `optional` **background**: `string`
+
+Defined in: [src/react/anumaRuntime.tsx:332](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#332)
+
+***
+
+### children?
+
+> `optional` **children**: `ReactNode`
+
+Defined in: [src/react/anumaRuntime.tsx:281](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#281)
+
+**Inherited from**
+
+`CommonProps.children`
+
+***
+
+### gap?
+
+> `optional` **gap**: `number`
+
+Defined in: [src/react/anumaRuntime.tsx:174](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#174)
+
+**Inherited from**
+
+`ContainerLayoutProps.gap`
+
+***
+
+### grow?
+
+> `optional` **grow**: `number`
+
+Defined in: [src/react/anumaRuntime.tsx:167](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#167)
+
+**Inherited from**
+
+`CommonProps.grow`
+
+***
+
+### h?
+
+> `optional` **h**: `number`
+
+Defined in: [src/react/anumaRuntime.tsx:165](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#165)
+
+**Inherited from**
+
+`CommonProps.h`
+
+***
+
+### id?
+
+> `optional` **id**: `string`
+
+Defined in: [src/react/anumaRuntime.tsx:279](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#279)
+
+**Inherited from**
+
+`CommonProps.id`
+
+***
+
+### justify?
+
+> `optional` **justify**: `string`
+
+Defined in: [src/react/anumaRuntime.tsx:176](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#176)
+
+**Inherited from**
+
+`ContainerLayoutProps.justify`
+
+***
+
+### layout?
+
+> `optional` **layout**: `string`
+
+Defined in: [src/react/anumaRuntime.tsx:173](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#173)
+
+**Inherited from**
+
+`ContainerLayoutProps.layout`
+
+***
+
+### padding?
+
+> `optional` **padding**: `number`
+
+Defined in: [src/react/anumaRuntime.tsx:175](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#175)
+
+**Inherited from**
+
+`ContainerLayoutProps.padding`
+
+***
+
+### rotation?
+
+> `optional` **rotation**: `number`
+
+Defined in: [src/react/anumaRuntime.tsx:166](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#166)
+
+**Inherited from**
+
+`CommonProps.rotation`
+
+***
+
+### shrink?
+
+> `optional` **shrink**: `number`
+
+Defined in: [src/react/anumaRuntime.tsx:168](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#168)
+
+**Inherited from**
+
+`CommonProps.shrink`
+
+***
+
+### style?
+
+> `optional` **style**: `CSSProperties`
+
+Defined in: [src/react/anumaRuntime.tsx:280](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#280)
+
+**Inherited from**
+
+`CommonProps.style`
+
+***
+
+### w?
+
+> `optional` **w**: `number`
+
+Defined in: [src/react/anumaRuntime.tsx:164](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#164)
+
+**Inherited from**
+
+`CommonProps.w`
+
+***
+
+### x?
+
+> `optional` **x**: `number`
+
+Defined in: [src/react/anumaRuntime.tsx:162](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#162)
+
+**Inherited from**
+
+`CommonProps.x`
+
+***
+
+### y?
+
+> `optional` **y**: `number`
+
+Defined in: [src/react/anumaRuntime.tsx:163](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#163)
+
+**Inherited from**
+
+`CommonProps.y`
diff --git a/src/content/sdk/react/Internal/interfaces/StorageOperationsContext.md b/src/content/sdk/react/Internal/interfaces/StorageOperationsContext.md
index 77c9b40f..374655fa 100644
--- a/src/content/sdk/react/Internal/interfaces/StorageOperationsContext.md
+++ b/src/content/sdk/react/Internal/interfaces/StorageOperationsContext.md
@@ -1,6 +1,6 @@
# StorageOperationsContext
-Defined in: [src/lib/db/chat/operations.ts:138](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/operations.ts#138)
+Defined in: [src/lib/db/chat/operations.ts:139](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/operations.ts#139)
## Properties
@@ -8,7 +8,7 @@ Defined in: [src/lib/db/chat/operations.ts:138](https://github.com/anuma-ai/sdk/
> **conversationsCollection**: `Collection`<[`ChatConversation`](../classes/ChatConversation.md)>
-Defined in: [src/lib/db/chat/operations.ts:141](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/operations.ts#141)
+Defined in: [src/lib/db/chat/operations.ts:142](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/operations.ts#142)
***
@@ -16,7 +16,7 @@ Defined in: [src/lib/db/chat/operations.ts:141](https://github.com/anuma-ai/sdk/
> **database**: `Database`
-Defined in: [src/lib/db/chat/operations.ts:139](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/operations.ts#139)
+Defined in: [src/lib/db/chat/operations.ts:140](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/operations.ts#140)
***
@@ -24,7 +24,7 @@ Defined in: [src/lib/db/chat/operations.ts:139](https://github.com/anuma-ai/sdk/
> `optional` **embeddedWalletSigner**: [`EmbeddedWalletSignerFn`](../type-aliases/EmbeddedWalletSignerFn.md)
-Defined in: [src/lib/db/chat/operations.ts:147](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/operations.ts#147)
+Defined in: [src/lib/db/chat/operations.ts:148](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/operations.ts#148)
Function for silent signing with embedded wallets
@@ -34,7 +34,7 @@ Function for silent signing with embedded wallets
> **messagesCollection**: `Collection`<[`ChatMessage`](../classes/ChatMessage.md)>
-Defined in: [src/lib/db/chat/operations.ts:140](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/operations.ts#140)
+Defined in: [src/lib/db/chat/operations.ts:141](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/operations.ts#141)
***
@@ -42,7 +42,7 @@ Defined in: [src/lib/db/chat/operations.ts:140](https://github.com/anuma-ai/sdk/
> `optional` **signMessage**: [`SignMessageFn`](../type-aliases/SignMessageFn.md)
-Defined in: [src/lib/db/chat/operations.ts:145](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/operations.ts#145)
+Defined in: [src/lib/db/chat/operations.ts:146](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/operations.ts#146)
Function to sign a message for encryption key derivation
@@ -52,6 +52,6 @@ Function to sign a message for encryption key derivation
> `optional` **walletAddress**: `string`
-Defined in: [src/lib/db/chat/operations.ts:143](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/operations.ts#143)
+Defined in: [src/lib/db/chat/operations.ts:144](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/operations.ts#144)
Wallet address for encryption (optional - when present, enables field-level encryption)
diff --git a/src/content/sdk/react/Internal/interfaces/StoredChatCompletionUsage.md b/src/content/sdk/react/Internal/interfaces/StoredChatCompletionUsage.md
index 4dd5360b..c076b9fe 100644
--- a/src/content/sdk/react/Internal/interfaces/StoredChatCompletionUsage.md
+++ b/src/content/sdk/react/Internal/interfaces/StoredChatCompletionUsage.md
@@ -1,6 +1,6 @@
# StoredChatCompletionUsage
-Defined in: [src/lib/db/chat/types.ts:97](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#97)
+Defined in: [src/lib/db/chat/types.ts:98](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#98)
## Properties
@@ -8,7 +8,7 @@ Defined in: [src/lib/db/chat/types.ts:97](https://github.com/anuma-ai/sdk/blob/m
> `optional` **completionTokens**: `number`
-Defined in: [src/lib/db/chat/types.ts:99](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#99)
+Defined in: [src/lib/db/chat/types.ts:100](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#100)
***
@@ -16,7 +16,7 @@ Defined in: [src/lib/db/chat/types.ts:99](https://github.com/anuma-ai/sdk/blob/m
> `optional` **costMicroUsd**: `number`
-Defined in: [src/lib/db/chat/types.ts:101](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#101)
+Defined in: [src/lib/db/chat/types.ts:102](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#102)
***
@@ -24,7 +24,7 @@ Defined in: [src/lib/db/chat/types.ts:101](https://github.com/anuma-ai/sdk/blob/
> `optional` **creditsUsed**: `number`
-Defined in: [src/lib/db/chat/types.ts:102](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#102)
+Defined in: [src/lib/db/chat/types.ts:103](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#103)
***
@@ -32,7 +32,7 @@ Defined in: [src/lib/db/chat/types.ts:102](https://github.com/anuma-ai/sdk/blob/
> `optional` **promptTokens**: `number`
-Defined in: [src/lib/db/chat/types.ts:98](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#98)
+Defined in: [src/lib/db/chat/types.ts:99](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#99)
***
@@ -40,4 +40,4 @@ Defined in: [src/lib/db/chat/types.ts:98](https://github.com/anuma-ai/sdk/blob/m
> `optional` **totalTokens**: `number`
-Defined in: [src/lib/db/chat/types.ts:100](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#100)
+Defined in: [src/lib/db/chat/types.ts:101](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#101)
diff --git a/src/content/sdk/react/Internal/interfaces/StoredConversation.md b/src/content/sdk/react/Internal/interfaces/StoredConversation.md
index 970bab0d..16c6de16 100644
--- a/src/content/sdk/react/Internal/interfaces/StoredConversation.md
+++ b/src/content/sdk/react/Internal/interfaces/StoredConversation.md
@@ -1,6 +1,6 @@
# StoredConversation
-Defined in: [src/lib/db/chat/types.ts:156](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#156)
+Defined in: [src/lib/db/chat/types.ts:157](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#157)
## Properties
@@ -8,7 +8,7 @@ Defined in: [src/lib/db/chat/types.ts:156](https://github.com/anuma-ai/sdk/blob/
> **conversationId**: `string`
-Defined in: [src/lib/db/chat/types.ts:158](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#158)
+Defined in: [src/lib/db/chat/types.ts:159](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#159)
***
@@ -16,7 +16,7 @@ Defined in: [src/lib/db/chat/types.ts:158](https://github.com/anuma-ai/sdk/blob/
> **createdAt**: `Date`
-Defined in: [src/lib/db/chat/types.ts:162](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#162)
+Defined in: [src/lib/db/chat/types.ts:163](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#163)
***
@@ -24,7 +24,7 @@ Defined in: [src/lib/db/chat/types.ts:162](https://github.com/anuma-ai/sdk/blob/
> **isDeleted**: `boolean`
-Defined in: [src/lib/db/chat/types.ts:164](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#164)
+Defined in: [src/lib/db/chat/types.ts:165](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#165)
***
@@ -32,7 +32,7 @@ Defined in: [src/lib/db/chat/types.ts:164](https://github.com/anuma-ai/sdk/blob/
> `optional` **projectId**: `string`
-Defined in: [src/lib/db/chat/types.ts:161](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#161)
+Defined in: [src/lib/db/chat/types.ts:162](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#162)
Optional project ID this conversation belongs to
@@ -42,7 +42,7 @@ Optional project ID this conversation belongs to
> **title**: `string`
-Defined in: [src/lib/db/chat/types.ts:159](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#159)
+Defined in: [src/lib/db/chat/types.ts:160](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#160)
***
@@ -50,7 +50,7 @@ Defined in: [src/lib/db/chat/types.ts:159](https://github.com/anuma-ai/sdk/blob/
> **uniqueId**: `string`
-Defined in: [src/lib/db/chat/types.ts:157](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#157)
+Defined in: [src/lib/db/chat/types.ts:158](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#158)
***
@@ -58,4 +58,4 @@ Defined in: [src/lib/db/chat/types.ts:157](https://github.com/anuma-ai/sdk/blob/
> **updatedAt**: `Date`
-Defined in: [src/lib/db/chat/types.ts:163](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#163)
+Defined in: [src/lib/db/chat/types.ts:164](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#164)
diff --git a/src/content/sdk/react/Internal/interfaces/StoredFileWithContext.md b/src/content/sdk/react/Internal/interfaces/StoredFileWithContext.md
index d9c5ae89..3954e0d5 100644
--- a/src/content/sdk/react/Internal/interfaces/StoredFileWithContext.md
+++ b/src/content/sdk/react/Internal/interfaces/StoredFileWithContext.md
@@ -1,6 +1,6 @@
# StoredFileWithContext
-Defined in: [src/lib/db/chat/types.ts:223](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#223)
+Defined in: [src/lib/db/chat/types.ts:248](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#248)
File metadata with conversation context for file browsing.
Extends FileMetadata with information about where the file was used.
@@ -15,7 +15,7 @@ Extends FileMetadata with information about where the file was used.
> **conversationId**: `string`
-Defined in: [src/lib/db/chat/types.ts:225](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#225)
+Defined in: [src/lib/db/chat/types.ts:250](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#250)
ID of the conversation where this file was attached
@@ -25,7 +25,7 @@ ID of the conversation where this file was attached
> **createdAt**: `Date`
-Defined in: [src/lib/db/chat/types.ts:227](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#227)
+Defined in: [src/lib/db/chat/types.ts:252](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#252)
Timestamp when the file was stored (from the message)
@@ -35,7 +35,7 @@ Timestamp when the file was stored (from the message)
> **id**: `string`
-Defined in: [src/lib/db/chat/types.ts:72](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#72)
+Defined in: [src/lib/db/chat/types.ts:73](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#73)
Unique identifier for the file (used as OPFS key for cached files)
@@ -49,7 +49,7 @@ Unique identifier for the file (used as OPFS key for cached files)
> **messageRole**: [`ChatRole`](../type-aliases/ChatRole.md)
-Defined in: [src/lib/db/chat/types.ts:229](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#229)
+Defined in: [src/lib/db/chat/types.ts:254](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#254)
Role of the message that contains this file
@@ -59,7 +59,7 @@ Role of the message that contains this file
> **name**: `string`
-Defined in: [src/lib/db/chat/types.ts:74](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#74)
+Defined in: [src/lib/db/chat/types.ts:75](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#75)
Display name of the file
@@ -73,7 +73,7 @@ Display name of the file
> **size**: `number`
-Defined in: [src/lib/db/chat/types.ts:78](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#78)
+Defined in: [src/lib/db/chat/types.ts:79](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#79)
File size in bytes
@@ -87,7 +87,7 @@ File size in bytes
> `optional` **sourceUrl**: `string`
-Defined in: [src/lib/db/chat/types.ts:94](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#94)
+Defined in: [src/lib/db/chat/types.ts:95](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#95)
Original external URL for files downloaded and cached locally (e.g., from MCP R2).
Used purely for URL→OPFS mapping to enable fallback when the source returns 404.
@@ -105,7 +105,7 @@ The file content is served from OPFS using the `id` field.
> **type**: `string`
-Defined in: [src/lib/db/chat/types.ts:76](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#76)
+Defined in: [src/lib/db/chat/types.ts:77](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#77)
MIME type (e.g., "image/png")
@@ -119,7 +119,7 @@ MIME type (e.g., "image/png")
> `optional` **url**: `string`
-Defined in: [src/lib/db/chat/types.ts:86](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#86)
+Defined in: [src/lib/db/chat/types.ts:87](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#87)
Content URL to include when sending this message to the AI.
When present, this URL is added as an `image_url` content part.
diff --git a/src/content/sdk/react/Internal/interfaces/StoredMessage.md b/src/content/sdk/react/Internal/interfaces/StoredMessage.md
index 6a615961..b07c0f7f 100644
--- a/src/content/sdk/react/Internal/interfaces/StoredMessage.md
+++ b/src/content/sdk/react/Internal/interfaces/StoredMessage.md
@@ -1,6 +1,6 @@
# StoredMessage
-Defined in: [src/lib/db/chat/types.ts:112](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#112)
+Defined in: [src/lib/db/chat/types.ts:113](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#113)
## Extended by
@@ -12,7 +12,7 @@ Defined in: [src/lib/db/chat/types.ts:112](https://github.com/anuma-ai/sdk/blob/
> `optional` **chunks**: [`MessageChunk`](MessageChunk.md)\[]
-Defined in: [src/lib/db/chat/types.ts:130](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#130)
+Defined in: [src/lib/db/chat/types.ts:131](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#131)
Chunks of this message with individual embeddings for fine-grained search
@@ -22,7 +22,7 @@ Chunks of this message with individual embeddings for fine-grained search
> **content**: `string`
-Defined in: [src/lib/db/chat/types.ts:117](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#117)
+Defined in: [src/lib/db/chat/types.ts:118](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#118)
***
@@ -30,7 +30,7 @@ Defined in: [src/lib/db/chat/types.ts:117](https://github.com/anuma-ai/sdk/blob/
> **conversationId**: `string`
-Defined in: [src/lib/db/chat/types.ts:115](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#115)
+Defined in: [src/lib/db/chat/types.ts:116](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#116)
***
@@ -38,7 +38,7 @@ Defined in: [src/lib/db/chat/types.ts:115](https://github.com/anuma-ai/sdk/blob/
> **createdAt**: `Date`
-Defined in: [src/lib/db/chat/types.ts:125](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#125)
+Defined in: [src/lib/db/chat/types.ts:126](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#126)
***
@@ -46,7 +46,7 @@ Defined in: [src/lib/db/chat/types.ts:125](https://github.com/anuma-ai/sdk/blob/
> `optional` **embeddingModel**: `string`
-Defined in: [src/lib/db/chat/types.ts:128](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#128)
+Defined in: [src/lib/db/chat/types.ts:129](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#129)
***
@@ -54,7 +54,7 @@ Defined in: [src/lib/db/chat/types.ts:128](https://github.com/anuma-ai/sdk/blob/
> `optional` **error**: `string`
-Defined in: [src/lib/db/chat/types.ts:136](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#136)
+Defined in: [src/lib/db/chat/types.ts:137](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#137)
If set, indicates the message failed with this error
@@ -64,7 +64,7 @@ If set, indicates the message failed with this error
> `optional` **feedback**: [`MessageFeedback`](../type-aliases/MessageFeedback.md)
-Defined in: [src/lib/db/chat/types.ts:143](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#143)
+Defined in: [src/lib/db/chat/types.ts:144](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#144)
User feedback: 'like', 'dislike', or null for no feedback
@@ -74,7 +74,7 @@ User feedback: 'like', 'dislike', or null for no feedback
> `optional` **fileIds**: `string`\[]
-Defined in: [src/lib/db/chat/types.ts:124](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#124)
+Defined in: [src/lib/db/chat/types.ts:125](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#125)
Array of media\_id references for direct lookup in media table
@@ -84,7 +84,7 @@ Array of media\_id references for direct lookup in media table
> `optional` **files**: [`FileMetadata`](FileMetadata.md)\[]
-Defined in: [src/lib/db/chat/types.ts:122](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#122)
+Defined in: [src/lib/db/chat/types.ts:123](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#123)
**Deprecated**
@@ -96,7 +96,7 @@ Use fileIds with media table instead
> `optional` **imageModel**: `string`
-Defined in: [src/lib/db/chat/types.ts:120](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#120)
+Defined in: [src/lib/db/chat/types.ts:121](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#121)
Image generation model used for this message (e.g., "nano-banana-flash")
@@ -106,7 +106,7 @@ Image generation model used for this message (e.g., "nano-banana-flash")
> **messageId**: `number`
-Defined in: [src/lib/db/chat/types.ts:114](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#114)
+Defined in: [src/lib/db/chat/types.ts:115](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#115)
***
@@ -114,7 +114,7 @@ Defined in: [src/lib/db/chat/types.ts:114](https://github.com/anuma-ai/sdk/blob/
> `optional` **model**: `string`
-Defined in: [src/lib/db/chat/types.ts:118](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#118)
+Defined in: [src/lib/db/chat/types.ts:119](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#119)
***
@@ -122,7 +122,7 @@ Defined in: [src/lib/db/chat/types.ts:118](https://github.com/anuma-ai/sdk/blob/
> `optional` **parentMessageId**: `string`
-Defined in: [src/lib/db/chat/types.ts:141](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#141)
+Defined in: [src/lib/db/chat/types.ts:142](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#142)
Parent message ID for branching (edit/regenerate). Null for root messages.
@@ -132,7 +132,7 @@ Parent message ID for branching (edit/regenerate). Null for root messages.
> `optional` **responseDuration**: `number`
-Defined in: [src/lib/db/chat/types.ts:133](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#133)
+Defined in: [src/lib/db/chat/types.ts:134](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#134)
***
@@ -140,7 +140,7 @@ Defined in: [src/lib/db/chat/types.ts:133](https://github.com/anuma-ai/sdk/blob/
> **role**: [`ChatRole`](../type-aliases/ChatRole.md)
-Defined in: [src/lib/db/chat/types.ts:116](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#116)
+Defined in: [src/lib/db/chat/types.ts:117](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#117)
***
@@ -148,7 +148,7 @@ Defined in: [src/lib/db/chat/types.ts:116](https://github.com/anuma-ai/sdk/blob/
> `optional` **sources**: [`SearchSource`](SearchSource.md)\[]
-Defined in: [src/lib/db/chat/types.ts:132](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#132)
+Defined in: [src/lib/db/chat/types.ts:133](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#133)
***
@@ -156,7 +156,7 @@ Defined in: [src/lib/db/chat/types.ts:132](https://github.com/anuma-ai/sdk/blob/
> `optional` **thinking**: `string`
-Defined in: [src/lib/db/chat/types.ts:139](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#139)
+Defined in: [src/lib/db/chat/types.ts:140](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#140)
Reasoning/thinking content from models that support extended thinking
@@ -166,7 +166,7 @@ Reasoning/thinking content from models that support extended thinking
> `optional` **thoughtProcess**: `ActivityPhase`\[]
-Defined in: [src/lib/db/chat/types.ts:137](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#137)
+Defined in: [src/lib/db/chat/types.ts:138](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#138)
***
@@ -174,7 +174,7 @@ Defined in: [src/lib/db/chat/types.ts:137](https://github.com/anuma-ai/sdk/blob/
> `optional` **toolCallEvents**: [`LlmapiToolCallEvent`](../../../client/Internal/type-aliases/LlmapiToolCallEvent.md)\[]
-Defined in: [src/lib/db/chat/types.ts:145](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#145)
+Defined in: [src/lib/db/chat/types.ts:146](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#146)
Tool call events from the backend response (for reconstructing tool call history)
@@ -184,7 +184,7 @@ Tool call events from the backend response (for reconstructing tool call history
> **uniqueId**: `string`
-Defined in: [src/lib/db/chat/types.ts:113](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#113)
+Defined in: [src/lib/db/chat/types.ts:114](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#114)
***
@@ -192,7 +192,7 @@ Defined in: [src/lib/db/chat/types.ts:113](https://github.com/anuma-ai/sdk/blob/
> **updatedAt**: `Date`
-Defined in: [src/lib/db/chat/types.ts:126](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#126)
+Defined in: [src/lib/db/chat/types.ts:127](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#127)
***
@@ -200,7 +200,7 @@ Defined in: [src/lib/db/chat/types.ts:126](https://github.com/anuma-ai/sdk/blob/
> `optional` **usage**: [`StoredChatCompletionUsage`](StoredChatCompletionUsage.md)
-Defined in: [src/lib/db/chat/types.ts:131](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#131)
+Defined in: [src/lib/db/chat/types.ts:132](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#132)
***
@@ -208,7 +208,7 @@ Defined in: [src/lib/db/chat/types.ts:131](https://github.com/anuma-ai/sdk/blob/
> `optional` **vector**: `number`\[]
-Defined in: [src/lib/db/chat/types.ts:127](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#127)
+Defined in: [src/lib/db/chat/types.ts:128](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#128)
***
@@ -216,4 +216,4 @@ Defined in: [src/lib/db/chat/types.ts:127](https://github.com/anuma-ai/sdk/blob/
> `optional` **wasStopped**: `boolean`
-Defined in: [src/lib/db/chat/types.ts:134](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#134)
+Defined in: [src/lib/db/chat/types.ts:135](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#135)
diff --git a/src/content/sdk/react/Internal/interfaces/StoredMessageWithSimilarity.md b/src/content/sdk/react/Internal/interfaces/StoredMessageWithSimilarity.md
index 8c6eb609..556c7759 100644
--- a/src/content/sdk/react/Internal/interfaces/StoredMessageWithSimilarity.md
+++ b/src/content/sdk/react/Internal/interfaces/StoredMessageWithSimilarity.md
@@ -1,6 +1,6 @@
# StoredMessageWithSimilarity
-Defined in: [src/lib/db/chat/types.ts:167](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#167)
+Defined in: [src/lib/db/chat/types.ts:192](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#192)
## Extends
@@ -12,7 +12,7 @@ Defined in: [src/lib/db/chat/types.ts:167](https://github.com/anuma-ai/sdk/blob/
> `optional` **chunks**: [`MessageChunk`](MessageChunk.md)\[]
-Defined in: [src/lib/db/chat/types.ts:130](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#130)
+Defined in: [src/lib/db/chat/types.ts:131](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#131)
Chunks of this message with individual embeddings for fine-grained search
@@ -26,7 +26,7 @@ Chunks of this message with individual embeddings for fine-grained search
> **content**: `string`
-Defined in: [src/lib/db/chat/types.ts:117](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#117)
+Defined in: [src/lib/db/chat/types.ts:118](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#118)
**Inherited from**
@@ -38,7 +38,7 @@ Defined in: [src/lib/db/chat/types.ts:117](https://github.com/anuma-ai/sdk/blob/
> **conversationId**: `string`
-Defined in: [src/lib/db/chat/types.ts:115](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#115)
+Defined in: [src/lib/db/chat/types.ts:116](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#116)
**Inherited from**
@@ -50,7 +50,7 @@ Defined in: [src/lib/db/chat/types.ts:115](https://github.com/anuma-ai/sdk/blob/
> **createdAt**: `Date`
-Defined in: [src/lib/db/chat/types.ts:125](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#125)
+Defined in: [src/lib/db/chat/types.ts:126](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#126)
**Inherited from**
@@ -62,7 +62,7 @@ Defined in: [src/lib/db/chat/types.ts:125](https://github.com/anuma-ai/sdk/blob/
> `optional` **embeddingModel**: `string`
-Defined in: [src/lib/db/chat/types.ts:128](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#128)
+Defined in: [src/lib/db/chat/types.ts:129](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#129)
**Inherited from**
@@ -74,7 +74,7 @@ Defined in: [src/lib/db/chat/types.ts:128](https://github.com/anuma-ai/sdk/blob/
> `optional` **error**: `string`
-Defined in: [src/lib/db/chat/types.ts:136](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#136)
+Defined in: [src/lib/db/chat/types.ts:137](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#137)
If set, indicates the message failed with this error
@@ -88,7 +88,7 @@ If set, indicates the message failed with this error
> `optional` **feedback**: [`MessageFeedback`](../type-aliases/MessageFeedback.md)
-Defined in: [src/lib/db/chat/types.ts:143](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#143)
+Defined in: [src/lib/db/chat/types.ts:144](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#144)
User feedback: 'like', 'dislike', or null for no feedback
@@ -102,7 +102,7 @@ User feedback: 'like', 'dislike', or null for no feedback
> `optional` **fileIds**: `string`\[]
-Defined in: [src/lib/db/chat/types.ts:124](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#124)
+Defined in: [src/lib/db/chat/types.ts:125](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#125)
Array of media\_id references for direct lookup in media table
@@ -116,7 +116,7 @@ Array of media\_id references for direct lookup in media table
> `optional` **files**: [`FileMetadata`](FileMetadata.md)\[]
-Defined in: [src/lib/db/chat/types.ts:122](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#122)
+Defined in: [src/lib/db/chat/types.ts:123](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#123)
**Deprecated**
@@ -132,7 +132,7 @@ Use fileIds with media table instead
> `optional` **imageModel**: `string`
-Defined in: [src/lib/db/chat/types.ts:120](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#120)
+Defined in: [src/lib/db/chat/types.ts:121](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#121)
Image generation model used for this message (e.g., "nano-banana-flash")
@@ -146,7 +146,7 @@ Image generation model used for this message (e.g., "nano-banana-flash")
> **messageId**: `number`
-Defined in: [src/lib/db/chat/types.ts:114](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#114)
+Defined in: [src/lib/db/chat/types.ts:115](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#115)
**Inherited from**
@@ -158,7 +158,7 @@ Defined in: [src/lib/db/chat/types.ts:114](https://github.com/anuma-ai/sdk/blob/
> `optional` **model**: `string`
-Defined in: [src/lib/db/chat/types.ts:118](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#118)
+Defined in: [src/lib/db/chat/types.ts:119](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#119)
**Inherited from**
@@ -170,7 +170,7 @@ Defined in: [src/lib/db/chat/types.ts:118](https://github.com/anuma-ai/sdk/blob/
> `optional` **parentMessageId**: `string`
-Defined in: [src/lib/db/chat/types.ts:141](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#141)
+Defined in: [src/lib/db/chat/types.ts:142](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#142)
Parent message ID for branching (edit/regenerate). Null for root messages.
@@ -184,7 +184,7 @@ Parent message ID for branching (edit/regenerate). Null for root messages.
> `optional` **responseDuration**: `number`
-Defined in: [src/lib/db/chat/types.ts:133](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#133)
+Defined in: [src/lib/db/chat/types.ts:134](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#134)
**Inherited from**
@@ -196,7 +196,7 @@ Defined in: [src/lib/db/chat/types.ts:133](https://github.com/anuma-ai/sdk/blob/
> **role**: [`ChatRole`](../type-aliases/ChatRole.md)
-Defined in: [src/lib/db/chat/types.ts:116](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#116)
+Defined in: [src/lib/db/chat/types.ts:117](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#117)
**Inherited from**
@@ -208,7 +208,7 @@ Defined in: [src/lib/db/chat/types.ts:116](https://github.com/anuma-ai/sdk/blob/
> **similarity**: `number`
-Defined in: [src/lib/db/chat/types.ts:168](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#168)
+Defined in: [src/lib/db/chat/types.ts:193](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#193)
***
@@ -216,7 +216,7 @@ Defined in: [src/lib/db/chat/types.ts:168](https://github.com/anuma-ai/sdk/blob/
> `optional` **sources**: [`SearchSource`](SearchSource.md)\[]
-Defined in: [src/lib/db/chat/types.ts:132](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#132)
+Defined in: [src/lib/db/chat/types.ts:133](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#133)
**Inherited from**
@@ -228,7 +228,7 @@ Defined in: [src/lib/db/chat/types.ts:132](https://github.com/anuma-ai/sdk/blob/
> `optional` **thinking**: `string`
-Defined in: [src/lib/db/chat/types.ts:139](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#139)
+Defined in: [src/lib/db/chat/types.ts:140](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#140)
Reasoning/thinking content from models that support extended thinking
@@ -242,7 +242,7 @@ Reasoning/thinking content from models that support extended thinking
> `optional` **thoughtProcess**: `ActivityPhase`\[]
-Defined in: [src/lib/db/chat/types.ts:137](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#137)
+Defined in: [src/lib/db/chat/types.ts:138](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#138)
**Inherited from**
@@ -254,7 +254,7 @@ Defined in: [src/lib/db/chat/types.ts:137](https://github.com/anuma-ai/sdk/blob/
> `optional` **toolCallEvents**: [`LlmapiToolCallEvent`](../../../client/Internal/type-aliases/LlmapiToolCallEvent.md)\[]
-Defined in: [src/lib/db/chat/types.ts:145](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#145)
+Defined in: [src/lib/db/chat/types.ts:146](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#146)
Tool call events from the backend response (for reconstructing tool call history)
@@ -268,7 +268,7 @@ Tool call events from the backend response (for reconstructing tool call history
> **uniqueId**: `string`
-Defined in: [src/lib/db/chat/types.ts:113](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#113)
+Defined in: [src/lib/db/chat/types.ts:114](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#114)
**Inherited from**
@@ -280,7 +280,7 @@ Defined in: [src/lib/db/chat/types.ts:113](https://github.com/anuma-ai/sdk/blob/
> **updatedAt**: `Date`
-Defined in: [src/lib/db/chat/types.ts:126](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#126)
+Defined in: [src/lib/db/chat/types.ts:127](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#127)
**Inherited from**
@@ -292,7 +292,7 @@ Defined in: [src/lib/db/chat/types.ts:126](https://github.com/anuma-ai/sdk/blob/
> `optional` **usage**: [`StoredChatCompletionUsage`](StoredChatCompletionUsage.md)
-Defined in: [src/lib/db/chat/types.ts:131](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#131)
+Defined in: [src/lib/db/chat/types.ts:132](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#132)
**Inherited from**
@@ -304,7 +304,7 @@ Defined in: [src/lib/db/chat/types.ts:131](https://github.com/anuma-ai/sdk/blob/
> `optional` **vector**: `number`\[]
-Defined in: [src/lib/db/chat/types.ts:127](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#127)
+Defined in: [src/lib/db/chat/types.ts:128](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#128)
**Inherited from**
@@ -316,7 +316,7 @@ Defined in: [src/lib/db/chat/types.ts:127](https://github.com/anuma-ai/sdk/blob/
> `optional` **wasStopped**: `boolean`
-Defined in: [src/lib/db/chat/types.ts:134](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#134)
+Defined in: [src/lib/db/chat/types.ts:135](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#135)
**Inherited from**
diff --git a/src/content/sdk/react/Internal/interfaces/TextProps.md b/src/content/sdk/react/Internal/interfaces/TextProps.md
new file mode 100644
index 00000000..f74e4b54
--- /dev/null
+++ b/src/content/sdk/react/Internal/interfaces/TextProps.md
@@ -0,0 +1,147 @@
+# TextProps
+
+Defined in: [src/react/anumaRuntime.tsx:629](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#629)
+
+## Extends
+
+* `CommonProps`
+
+## Properties
+
+### alignSelf?
+
+> `optional` **alignSelf**: `string`
+
+Defined in: [src/react/anumaRuntime.tsx:169](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#169)
+
+**Inherited from**
+
+`CommonProps.alignSelf`
+
+***
+
+### children?
+
+> `optional` **children**: `ReactNode`
+
+Defined in: [src/react/anumaRuntime.tsx:281](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#281)
+
+**Inherited from**
+
+`CommonProps.children`
+
+***
+
+### fontRole?
+
+> `optional` **fontRole**: `"body"` | `"heading"`
+
+Defined in: [src/react/anumaRuntime.tsx:630](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#630)
+
+***
+
+### grow?
+
+> `optional` **grow**: `number`
+
+Defined in: [src/react/anumaRuntime.tsx:167](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#167)
+
+**Inherited from**
+
+`CommonProps.grow`
+
+***
+
+### h?
+
+> `optional` **h**: `number`
+
+Defined in: [src/react/anumaRuntime.tsx:165](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#165)
+
+**Inherited from**
+
+`CommonProps.h`
+
+***
+
+### id?
+
+> `optional` **id**: `string`
+
+Defined in: [src/react/anumaRuntime.tsx:279](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#279)
+
+**Inherited from**
+
+`CommonProps.id`
+
+***
+
+### rotation?
+
+> `optional` **rotation**: `number`
+
+Defined in: [src/react/anumaRuntime.tsx:166](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#166)
+
+**Inherited from**
+
+`CommonProps.rotation`
+
+***
+
+### shrink?
+
+> `optional` **shrink**: `number`
+
+Defined in: [src/react/anumaRuntime.tsx:168](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#168)
+
+**Inherited from**
+
+`CommonProps.shrink`
+
+***
+
+### style?
+
+> `optional` **style**: `CSSProperties`
+
+Defined in: [src/react/anumaRuntime.tsx:280](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#280)
+
+**Inherited from**
+
+`CommonProps.style`
+
+***
+
+### w?
+
+> `optional` **w**: `number`
+
+Defined in: [src/react/anumaRuntime.tsx:164](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#164)
+
+**Inherited from**
+
+`CommonProps.w`
+
+***
+
+### x?
+
+> `optional` **x**: `number`
+
+Defined in: [src/react/anumaRuntime.tsx:162](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#162)
+
+**Inherited from**
+
+`CommonProps.x`
+
+***
+
+### y?
+
+> `optional` **y**: `number`
+
+Defined in: [src/react/anumaRuntime.tsx:163](https://github.com/anuma-ai/sdk/blob/main/src/react/anumaRuntime.tsx#163)
+
+**Inherited from**
+
+`CommonProps.y`
diff --git a/src/content/sdk/react/Internal/interfaces/ToolSet.md b/src/content/sdk/react/Internal/interfaces/ToolSet.md
new file mode 100644
index 00000000..b48676eb
--- /dev/null
+++ b/src/content/sdk/react/Internal/interfaces/ToolSet.md
@@ -0,0 +1,64 @@
+# ToolSet
+
+Defined in: [src/lib/tools/serverTools.ts:833](https://github.com/anuma-ai/sdk/blob/main/src/lib/tools/serverTools.ts#833)
+
+A tool set defines a group of tools that work together. When any "anchor"
+tool in the set is matched semantically (with a score at or above
+`anchorMinSimilarity`), the set is activated and all of its members are
+pulled into the selection.
+
+Two activation strategies consume this interface:
+
+* `expandToolSetsAdditive` (used by `useChatStorage` and
+ `createServerToolsFilter`) keeps all original matches and adds the
+ set's members on top — non-set tools are never dropped.
+* `applyToolSets` is exclusive: it keeps only set members plus non-set
+ tools that scored above `independentThreshold`.
+
+Pick `expandToolSetsAdditive` when you want recall over precision
+(typical), and `applyToolSets` when you specifically want non-set
+matches stripped on activation.
+
+## Properties
+
+### anchorMinSimilarity?
+
+> `optional` **anchorMinSimilarity**: `number`
+
+Defined in: [src/lib/tools/serverTools.ts:849](https://github.com/anuma-ai/sdk/blob/main/src/lib/tools/serverTools.ts#849)
+
+Minimum similarity an anchor must reach to activate the set.
+Prevents false activation on prompts where the anchor barely passes
+the global minSimilarity threshold. Default: 0.60
+
+***
+
+### anchors
+
+> **anchors**: `string`\[]
+
+Defined in: [src/lib/tools/serverTools.ts:843](https://github.com/anuma-ai/sdk/blob/main/src/lib/tools/serverTools.ts#843)
+
+Tools that trigger the set when selected. If any anchor appears in the
+semantic match results with a score at or above `anchorMinSimilarity`,
+all members are pulled in.
+
+***
+
+### members
+
+> **members**: `string`\[]
+
+Defined in: [src/lib/tools/serverTools.ts:837](https://github.com/anuma-ai/sdk/blob/main/src/lib/tools/serverTools.ts#837)
+
+All tool names in the set
+
+***
+
+### name
+
+> **name**: `string`
+
+Defined in: [src/lib/tools/serverTools.ts:835](https://github.com/anuma-ai/sdk/blob/main/src/lib/tools/serverTools.ts#835)
+
+Human-readable name for logging/debugging
diff --git a/src/content/sdk/react/Internal/interfaces/UseChatStorageOptions.md b/src/content/sdk/react/Internal/interfaces/UseChatStorageOptions.md
index 5832dba4..2ce5d8c1 100644
--- a/src/content/sdk/react/Internal/interfaces/UseChatStorageOptions.md
+++ b/src/content/sdk/react/Internal/interfaces/UseChatStorageOptions.md
@@ -1,6 +1,6 @@
# UseChatStorageOptions
-Defined in: [src/react/useChatStorage.ts:459](https://github.com/anuma-ai/sdk/blob/main/src/react/useChatStorage.ts#459)
+Defined in: [src/react/useChatStorage.ts:599](https://github.com/anuma-ai/sdk/blob/main/src/react/useChatStorage.ts#599)
Options for useChatStorage hook (React version)
@@ -12,11 +12,32 @@ Extends base options with apiType support.
## Properties
+### activeToolSets?
+
+> `optional` **activeToolSets**: `string`\[]
+
+Defined in: [src/react/useChatStorage.ts:681](https://github.com/anuma-ai/sdk/blob/main/src/react/useChatStorage.ts#681)
+
+Tool set names that should expand unconditionally for this request,
+bypassing the anchor-similarity check. Use when conversation state
+implies a set should be present regardless of how the prompt is phrased
+— e.g., pass `["slides"]` when the conversation already contains a slide
+deck artifact, so short follow-up prompts ("add a thank you slide",
+"make it bigger") still get the full slide toolkit.
+
+Read via a ref so updates are visible to in-flight `sendMessage` calls
+without rebuilding the callback.
+
+Names must match a set's `name` from `BUILT_IN_TOOL_SETS` or
+`extraToolSets`. Unknown names are ignored.
+
+***
+
### apiType?
> `optional` **apiType**: `ApiType`
-Defined in: [src/react/useChatStorage.ts:465](https://github.com/anuma-ai/sdk/blob/main/src/react/useChatStorage.ts#465)
+Defined in: [src/react/useChatStorage.ts:605](https://github.com/anuma-ai/sdk/blob/main/src/react/useChatStorage.ts#605)
Which API endpoint to use. Default: "responses"
@@ -29,7 +50,7 @@ Which API endpoint to use. Default: "responses"
> `optional` **autoCreateConversation**: `boolean`
-Defined in: [src/lib/db/chat/types.ts:303](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#303)
+Defined in: [src/lib/db/chat/types.ts:336](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#336)
Automatically create a new conversation if none is set (default: true)
@@ -43,7 +64,7 @@ Automatically create a new conversation if none is set (default: true)
> `optional` **autoEmbedMessages**: `boolean`
-Defined in: [src/lib/db/chat/types.ts:361](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#361)
+Defined in: [src/lib/db/chat/types.ts:394](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#394)
Automatically generate embeddings for messages after saving.
Enables semantic search over past conversations via searchMessages().
@@ -64,7 +85,7 @@ true
> `optional` **autoFlushOnKeyAvailable**: `boolean`
-Defined in: [src/react/useChatStorage.ts:514](https://github.com/anuma-ai/sdk/blob/main/src/react/useChatStorage.ts#514)
+Defined in: [src/react/useChatStorage.ts:654](https://github.com/anuma-ai/sdk/blob/main/src/react/useChatStorage.ts#654)
Automatically flush queued operations when the encryption key becomes
available. Requires `enableQueue` to be true.
@@ -81,7 +102,7 @@ true
> `optional` **baseUrl**: `string`
-Defined in: [src/lib/db/chat/types.ts:309](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#309)
+Defined in: [src/lib/db/chat/types.ts:342](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#342)
Base URL for the chat API endpoint
@@ -95,7 +116,7 @@ Base URL for the chat API endpoint
> `optional` **conversationId**: `string`
-Defined in: [src/lib/db/chat/types.ts:301](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#301)
+Defined in: [src/lib/db/chat/types.ts:334](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#334)
ID of an existing conversation to load and continue
@@ -109,7 +130,7 @@ ID of an existing conversation to load and continue
> **database**: `Database`
-Defined in: [src/lib/db/chat/types.ts:299](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#299)
+Defined in: [src/lib/db/chat/types.ts:332](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#332)
WatermelonDB database instance for storing conversations and messages
@@ -123,7 +144,7 @@ WatermelonDB database instance for storing conversations and messages
> `optional` **defaultConversationTitle**: `string`
-Defined in: [src/lib/db/chat/types.ts:305](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#305)
+Defined in: [src/lib/db/chat/types.ts:338](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#338)
Title for auto-created conversations (default: "New conversation")
@@ -137,7 +158,7 @@ Title for auto-created conversations (default: "New conversation")
> `optional` **embeddedWalletSigner**: [`EmbeddedWalletSignerFn`](../type-aliases/EmbeddedWalletSignerFn.md)
-Defined in: [src/react/useChatStorage.ts:492](https://github.com/anuma-ai/sdk/blob/main/src/react/useChatStorage.ts#492)
+Defined in: [src/react/useChatStorage.ts:632](https://github.com/anuma-ai/sdk/blob/main/src/react/useChatStorage.ts#632)
Function for silent signing with Privy embedded wallets.
When provided, enables automatic encryption key derivation without
@@ -149,7 +170,7 @@ user confirmation modals.
> `optional` **embeddingModel**: `string`
-Defined in: [src/lib/db/chat/types.ts:366](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#366)
+Defined in: [src/lib/db/chat/types.ts:399](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#399)
Embedding model to use when autoEmbedMessages is enabled.
@@ -169,7 +190,7 @@ DEFAULT_API_EMBEDDING_MODEL
> `optional` **enableQueue**: `boolean`
-Defined in: [src/react/useChatStorage.ts:507](https://github.com/anuma-ai/sdk/blob/main/src/react/useChatStorage.ts#507)
+Defined in: [src/react/useChatStorage.ts:647](https://github.com/anuma-ai/sdk/blob/main/src/react/useChatStorage.ts#647)
Enable the in-memory write queue for operations when encryption key
isn't yet available. When enabled, operations are held in memory and
@@ -183,11 +204,27 @@ true
***
+### extraToolSets?
+
+> `optional` **extraToolSets**: [`ToolSet`](ToolSet.md)\[]
+
+Defined in: [src/react/useChatStorage.ts:665](https://github.com/anuma-ai/sdk/blob/main/src/react/useChatStorage.ts#665)
+
+Additional tool sets to apply on top of the built-in ones (app-generation,
+slides, github). When any anchor tool in a custom set is selected by
+semantic matching, all members of that set are included automatically.
+
+Treated as static config — set once at hook setup. Changing it across
+renders does not affect in-flight `sendMessage` calls; use
+`activeToolSets` for dynamic, conversation-state-driven overrides.
+
+***
+
### fileProcessingOptions?
> `optional` **fileProcessingOptions**: `object`
-Defined in: [src/lib/db/chat/types.ts:338](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#338)
+Defined in: [src/lib/db/chat/types.ts:371](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#371)
Options for file preprocessing behavior
@@ -319,7 +356,7 @@ Callback for progress updates
> `optional` **fileProcessors**: [`FileProcessor`](FileProcessor.md)\[] | `null`
-Defined in: [src/lib/db/chat/types.ts:334](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#334)
+Defined in: [src/lib/db/chat/types.ts:367](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#367)
File preprocessors to use for automatic text extraction.
@@ -337,7 +374,7 @@ File preprocessors to use for automatic text extraction.
> `optional` **getToken**: () => `Promise`<`string` | `null`>
-Defined in: [src/lib/db/chat/types.ts:307](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#307)
+Defined in: [src/lib/db/chat/types.ts:340](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#340)
Function to retrieve the auth token for API requests
@@ -355,7 +392,7 @@ Function to retrieve the auth token for API requests
> `optional` **getWalletAddress**: () => `Promise`<`string` | `null`>
-Defined in: [src/react/useChatStorage.ts:499](https://github.com/anuma-ai/sdk/blob/main/src/react/useChatStorage.ts#499)
+Defined in: [src/react/useChatStorage.ts:639](https://github.com/anuma-ai/sdk/blob/main/src/react/useChatStorage.ts#639)
Async function that returns the wallet address when available.
Used for polling during Privy embedded wallet initialization.
@@ -371,7 +408,7 @@ When the wallet isn't ready yet, should return null.
> `optional` **mcpR2Domain**: `string`
-Defined in: [src/lib/db/chat/types.ts:378](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#378)
+Defined in: [src/lib/db/chat/types.ts:411](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#411)
R2 domain for identifying MCP-generated image URLs.
When set, enables OPFS caching of generated images.
@@ -387,7 +424,7 @@ Defaults to the hardcoded MCP\_R2\_DOMAIN from clientConfig.
> `optional` **minContentLength**: `number`
-Defined in: [src/lib/db/chat/types.ts:372](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#372)
+Defined in: [src/lib/db/chat/types.ts:405](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#405)
Minimum content length required to generate embeddings.
Messages shorter than this are skipped as they provide limited semantic value.
@@ -408,7 +445,7 @@ Messages shorter than this are skipped as they provide limited semantic value.
> `optional` **onData**: (`chunk`: `string`) => `void`
-Defined in: [src/lib/db/chat/types.ts:311](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#311)
+Defined in: [src/lib/db/chat/types.ts:344](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#344)
Callback invoked with each streamed response chunk
@@ -451,7 +488,7 @@ Callback invoked with each streamed response chunk
> `optional` **onError**: (`error`: `Error`) => `void`
-Defined in: [src/lib/db/chat/types.ts:317](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#317)
+Defined in: [src/lib/db/chat/types.ts:350](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#350)
Callback invoked when an error occurs during the request
@@ -494,7 +531,7 @@ Callback invoked when an error occurs during the request
> `optional` **onFinish**: (`response`: [`LlmapiResponseResponse`](../../../client/Internal/type-aliases/LlmapiResponseResponse.md)) => `void`
-Defined in: [src/lib/db/chat/types.ts:315](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#315)
+Defined in: [src/lib/db/chat/types.ts:348](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#348)
Callback invoked when the response completes successfully
@@ -537,7 +574,7 @@ Callback invoked when the response completes successfully
> `optional` **onServerToolCall**: (`toolCall`: `ServerToolCallEvent`) => `void`
-Defined in: [src/lib/db/chat/types.ts:322](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#322)
+Defined in: [src/lib/db/chat/types.ts:355](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#355)
Callback invoked when a server-side tool (MCP) is called during streaming.
Use this to show activity indicators like "Searching..." in the UI.
@@ -581,7 +618,7 @@ Use this to show activity indicators like "Searching..." in the UI.
> `optional` **onThinking**: (`chunk`: `string`) => `void`
-Defined in: [src/lib/db/chat/types.ts:313](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#313)
+Defined in: [src/lib/db/chat/types.ts:346](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#346)
Callback invoked when thinking/reasoning content is received (from `` tags or API reasoning)
@@ -624,7 +661,7 @@ Callback invoked when thinking/reasoning content is received (from `` tag
> `optional` **onToolCallArgumentsDelta**: (`event`: [`ToolCallArgumentsDeltaEvent`](../type-aliases/ToolCallArgumentsDeltaEvent.md)) => `void`
-Defined in: [src/lib/db/chat/types.ts:327](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#327)
+Defined in: [src/lib/db/chat/types.ts:360](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#360)
Called with partial tool call arguments as they stream in.
Use for live preview of artifacts (HTML, slides) being generated.
@@ -664,11 +701,30 @@ Use for live preview of artifacts (HTML, slides) being generated.
***
+### preProcessors?
+
+> `optional` **preProcessors**: `PromptPreProcessor`\[]
+
+Defined in: [src/lib/db/chat/types.ts:420](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#420)
+
+Pre-processors run after the last user message is received but before
+the first LLM request. Each receives the prompt text and a shared
+embedding (computed once per request) and may return messages to
+enrich the conversation. Forwarded to the underlying `useChat` hook.
+See `createWebSearchPreProcessor`, `createPricePreProcessor`, or write
+a custom one matching `PromptPreProcessor`.
+
+**Inherited from**
+
+`BaseUseChatStorageOptions.preProcessors`
+
+***
+
### serverTools?
> `optional` **serverTools**: `object`
-Defined in: [src/lib/db/chat/types.ts:352](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#352)
+Defined in: [src/lib/db/chat/types.ts:385](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#385)
Configuration for server-side tools fetching and caching.
Server tools are fetched from /api/v1/tools and cached in localStorage.
@@ -689,7 +745,7 @@ Cache expiration time in milliseconds (default: 86400000 = 1 day)
> `optional` **signMessage**: [`SignMessageFn`](../type-aliases/SignMessageFn.md)
-Defined in: [src/react/useChatStorage.ts:485](https://github.com/anuma-ai/sdk/blob/main/src/react/useChatStorage.ts#485)
+Defined in: [src/react/useChatStorage.ts:625](https://github.com/anuma-ai/sdk/blob/main/src/react/useChatStorage.ts#625)
Function to sign a message for encryption key derivation.
Typically from Privy's useSignMessage hook.
@@ -701,7 +757,7 @@ Required together with walletAddress for field-level encryption.
> `optional` **walletAddress**: `string`
-Defined in: [src/react/useChatStorage.ts:478](https://github.com/anuma-ai/sdk/blob/main/src/react/useChatStorage.ts#478)
+Defined in: [src/react/useChatStorage.ts:618](https://github.com/anuma-ai/sdk/blob/main/src/react/useChatStorage.ts#618)
Wallet address for encrypted file storage and field-level encryption.
When provided with signMessage, all sensitive message content, conversation titles,
diff --git a/src/content/sdk/react/Internal/interfaces/UseChatStorageResult.md b/src/content/sdk/react/Internal/interfaces/UseChatStorageResult.md
index 6f95616d..ef5f1acb 100644
--- a/src/content/sdk/react/Internal/interfaces/UseChatStorageResult.md
+++ b/src/content/sdk/react/Internal/interfaces/UseChatStorageResult.md
@@ -1,6 +1,6 @@
# UseChatStorageResult
-Defined in: [src/react/useChatStorage.ts:593](https://github.com/anuma-ai/sdk/blob/main/src/react/useChatStorage.ts#593)
+Defined in: [src/react/useChatStorage.ts:760](https://github.com/anuma-ai/sdk/blob/main/src/react/useChatStorage.ts#760)
Result returned by useChatStorage hook (React version)
@@ -16,7 +16,7 @@ Extends base result with React-specific sendMessage signature.
> **clearQueue**: () => `void`
-Defined in: [src/react/useChatStorage.ts:729](https://github.com/anuma-ai/sdk/blob/main/src/react/useChatStorage.ts#729)
+Defined in: [src/react/useChatStorage.ts:896](https://github.com/anuma-ai/sdk/blob/main/src/react/useChatStorage.ts#896)
Clear all queued operations for the current wallet.
Discards pending operations without writing them.
@@ -31,7 +31,7 @@ Discards pending operations without writing them.
> **conversationId**: `string` | `null`
-Defined in: [src/lib/db/chat/types.ts:718](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#718)
+Defined in: [src/lib/db/chat/types.ts:769](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#769)
**Inherited from**
@@ -43,7 +43,7 @@ Defined in: [src/lib/db/chat/types.ts:718](https://github.com/anuma-ai/sdk/blob/
> **createConversation**: (`options?`: [`CreateConversationOptions`](CreateConversationOptions.md)) => `Promise`<[`StoredConversation`](StoredConversation.md)>
-Defined in: [src/lib/db/chat/types.ts:720](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#720)
+Defined in: [src/lib/db/chat/types.ts:771](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#771)
**Parameters**
@@ -84,7 +84,7 @@ Defined in: [src/lib/db/chat/types.ts:720](https://github.com/anuma-ai/sdk/blob/
> **createMemoryEngineTool**: (`searchOptions?`: `Partial`<[`MemoryEngineSearchOptions`](MemoryEngineSearchOptions.md)>) => `ToolConfig`
-Defined in: [src/react/useChatStorage.ts:647](https://github.com/anuma-ai/sdk/blob/main/src/react/useChatStorage.ts#647)
+Defined in: [src/react/useChatStorage.ts:814](https://github.com/anuma-ai/sdk/blob/main/src/react/useChatStorage.ts#814)
Create a memory engine tool for LLM to search past conversations.
The tool is pre-configured with the hook's storage context and auth.
@@ -142,7 +142,7 @@ await sendMessage({
> **createMemoryVaultSearchTool**: (`searchOptions?`: [`MemoryVaultSearchOptions`](MemoryVaultSearchOptions.md)) => `ToolConfig`
-Defined in: [src/react/useChatStorage.ts:666](https://github.com/anuma-ai/sdk/blob/main/src/react/useChatStorage.ts#666)
+Defined in: [src/react/useChatStorage.ts:833](https://github.com/anuma-ai/sdk/blob/main/src/react/useChatStorage.ts#833)
Create a memory vault search tool for LLM to search vault memories
using semantic similarity. Pre-configured with vault context, auth, and
@@ -191,7 +191,7 @@ A ToolConfig that can be passed to sendMessage's clientTools
> **createMemoryVaultTool**: (`options?`: [`MemoryVaultToolOptions`](MemoryVaultToolOptions.md)) => `ToolConfig`
-Defined in: [src/react/useChatStorage.ts:656](https://github.com/anuma-ai/sdk/blob/main/src/react/useChatStorage.ts#656)
+Defined in: [src/react/useChatStorage.ts:823](https://github.com/anuma-ai/sdk/blob/main/src/react/useChatStorage.ts#823)
Create a memory vault tool for LLM to save/update persistent memories.
The tool is pre-configured with the hook's vault context and encryption.
@@ -239,7 +239,7 @@ A ToolConfig that can be passed to sendMessage's clientTools
> **createVaultMemory**: (`content`: `string`, `scope?`: `string`) => `Promise`<[`StoredVaultMemory`](StoredVaultMemory.md)>
-Defined in: [src/react/useChatStorage.ts:699](https://github.com/anuma-ai/sdk/blob/main/src/react/useChatStorage.ts#699)
+Defined in: [src/react/useChatStorage.ts:866](https://github.com/anuma-ai/sdk/blob/main/src/react/useChatStorage.ts#866)
Create a new vault memory with the given content.
@@ -301,7 +301,7 @@ Optional scope (defaults to "private")
> **deleteConversation**: (`id`: `string`) => `Promise`<`boolean`>
-Defined in: [src/lib/db/chat/types.ts:724](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#724)
+Defined in: [src/lib/db/chat/types.ts:775](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#775)
**Parameters**
@@ -342,7 +342,7 @@ Defined in: [src/lib/db/chat/types.ts:724](https://github.com/anuma-ai/sdk/blob/
> **deleteVaultMemory**: (`id`: `string`) => `Promise`<`boolean`>
-Defined in: [src/react/useChatStorage.ts:716](https://github.com/anuma-ai/sdk/blob/main/src/react/useChatStorage.ts#716)
+Defined in: [src/react/useChatStorage.ts:883](https://github.com/anuma-ai/sdk/blob/main/src/react/useChatStorage.ts#883)
Delete a vault memory by its ID (soft delete).
@@ -383,7 +383,7 @@ true if the memory was found and deleted
> **flushQueue**: () => `Promise`<[`FlushResult`](FlushResult.md)>
-Defined in: [src/react/useChatStorage.ts:723](https://github.com/anuma-ai/sdk/blob/main/src/react/useChatStorage.ts#723)
+Defined in: [src/react/useChatStorage.ts:890](https://github.com/anuma-ai/sdk/blob/main/src/react/useChatStorage.ts#890)
Manually flush all queued operations for the current wallet.
Operations are encrypted and written to the database.
@@ -399,7 +399,7 @@ Requires the encryption key to be available.
> **getAllFiles**: (`options?`: `object`) => `Promise`<[`StoredFileWithContext`](StoredFileWithContext.md)\[]>
-Defined in: [src/react/useChatStorage.ts:627](https://github.com/anuma-ai/sdk/blob/main/src/react/useChatStorage.ts#627)
+Defined in: [src/react/useChatStorage.ts:794](https://github.com/anuma-ai/sdk/blob/main/src/react/useChatStorage.ts#794)
Get all files from all conversations, sorted by creation date (newest first).
Returns files with conversation context for building file browser UIs.
@@ -463,7 +463,7 @@ Returns files with conversation context for building file browser UIs.
> **getConversation**: (`id`: `string`) => `Promise`<[`StoredConversation`](StoredConversation.md) | `null`>
-Defined in: [src/lib/db/chat/types.ts:721](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#721)
+Defined in: [src/lib/db/chat/types.ts:772](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#772)
**Parameters**
@@ -504,7 +504,7 @@ Defined in: [src/lib/db/chat/types.ts:721](https://github.com/anuma-ai/sdk/blob/
> **getConversations**: () => `Promise`<[`StoredConversation`](StoredConversation.md)\[]>
-Defined in: [src/lib/db/chat/types.ts:722](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#722)
+Defined in: [src/lib/db/chat/types.ts:773](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#773)
**Returns**
@@ -520,7 +520,7 @@ Defined in: [src/lib/db/chat/types.ts:722](https://github.com/anuma-ai/sdk/blob/
> **getMessages**: (`conversationId`: `string`) => `Promise`<[`StoredMessage`](StoredMessage.md)\[]>
-Defined in: [src/lib/db/chat/types.ts:725](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#725)
+Defined in: [src/lib/db/chat/types.ts:776](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#776)
**Parameters**
@@ -561,7 +561,7 @@ Defined in: [src/lib/db/chat/types.ts:725](https://github.com/anuma-ai/sdk/blob/
> **getVaultMemories**: (`options?`: `object`) => `Promise`<[`StoredVaultMemory`](StoredVaultMemory.md)\[]>
-Defined in: [src/react/useChatStorage.ts:692](https://github.com/anuma-ai/sdk/blob/main/src/react/useChatStorage.ts#692)
+Defined in: [src/react/useChatStorage.ts:859](https://github.com/anuma-ai/sdk/blob/main/src/react/useChatStorage.ts#859)
Get all vault memories for context injection.
Returns non-deleted memories sorted by creation date (newest first).
@@ -624,7 +624,7 @@ Optional filtering (scopes to include)
> **isLoading**: `boolean`
-Defined in: [src/lib/db/chat/types.ts:716](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#716)
+Defined in: [src/lib/db/chat/types.ts:767](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#767)
**Inherited from**
@@ -636,7 +636,7 @@ Defined in: [src/lib/db/chat/types.ts:716](https://github.com/anuma-ai/sdk/blob/
> **queueStatus**: [`QueueStatus`](QueueStatus.md)
-Defined in: [src/react/useChatStorage.ts:734](https://github.com/anuma-ai/sdk/blob/main/src/react/useChatStorage.ts#734)
+Defined in: [src/react/useChatStorage.ts:901](https://github.com/anuma-ai/sdk/blob/main/src/react/useChatStorage.ts#901)
Current status of the write queue.
@@ -646,7 +646,7 @@ Current status of the write queue.
> **searchVaultMemories**: (`query`: `string`, `searchOptions?`: [`MemoryVaultSearchOptions`](MemoryVaultSearchOptions.md)) => `Promise`<[`VaultSearchResult`](VaultSearchResult.md)\[]>
-Defined in: [src/react/useChatStorage.ts:676](https://github.com/anuma-ai/sdk/blob/main/src/react/useChatStorage.ts#676)
+Defined in: [src/react/useChatStorage.ts:843](https://github.com/anuma-ai/sdk/blob/main/src/react/useChatStorage.ts#843)
Search vault memories programmatically using semantic similarity.
Returns structured results sorted by descending similarity.
@@ -710,7 +710,7 @@ Optional search configuration (limit, minSimilarity, scopes)
> **sendMessage**: (`args`: `object`) => `Promise`<[`SendMessageWithStorageResult`](../type-aliases/SendMessageWithStorageResult.md)>
-Defined in: [src/react/useChatStorage.ts:622](https://github.com/anuma-ai/sdk/blob/main/src/react/useChatStorage.ts#622)
+Defined in: [src/react/useChatStorage.ts:789](https://github.com/anuma-ai/sdk/blob/main/src/react/useChatStorage.ts#789)
Sends a message to the AI and automatically persists both the user message
and assistant response to the database.
@@ -777,6 +777,27 @@ Useful when different models need different APIs within the same hook instance.
+`args.assistantUniqueId?`
+
+
+
+
+`string`
+
+
+
+
+Pre-generated unique ID for the assistant response message.
+When provided, the persisted assistant message will use this ID instead of
+an auto-generated one. This lets the consumer show an in-flight streaming
+placeholder under the same React key, avoiding an unmount/remount flash
+when streaming completes and the message is loaded from the database.
+
+
+
+
+
+
`args.clientTools?`
@@ -1111,7 +1132,7 @@ sendMessage({
-The model identifier to use for this request (e.g., "gpt-4o", "claude-sonnet-4-20250514").
+The model identifier to use for this request (e.g., "fireworks/accounts/fireworks/models/kimi-k2p5").
If not specified, uses the default model configured on the server.
@@ -1518,7 +1539,7 @@ Controls which tool the model should use:
```ts
const result = await sendMessage({
content: "Explain quantum computing",
- model: "gpt-4o",
+ model: "fireworks/accounts/fireworks/models/kimi-k2p5",
includeHistory: true,
onData: (chunk) => setStreamingText(prev => prev + chunk),
});
@@ -1536,7 +1557,7 @@ if (result.error) {
> **setConversationId**: (`id`: `string` | `null`) => `void`
-Defined in: [src/lib/db/chat/types.ts:719](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#719)
+Defined in: [src/lib/db/chat/types.ts:770](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#770)
**Parameters**
@@ -1577,7 +1598,7 @@ Defined in: [src/lib/db/chat/types.ts:719](https://github.com/anuma-ai/sdk/blob/
> **stop**: () => `void`
-Defined in: [src/lib/db/chat/types.ts:717](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#717)
+Defined in: [src/lib/db/chat/types.ts:768](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#768)
**Returns**
@@ -1593,7 +1614,7 @@ Defined in: [src/lib/db/chat/types.ts:717](https://github.com/anuma-ai/sdk/blob/
> **updateConversationTitle**: (`id`: `string`, `title`: `string`) => `Promise`<`boolean`>
-Defined in: [src/lib/db/chat/types.ts:723](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#723)
+Defined in: [src/lib/db/chat/types.ts:774](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#774)
**Parameters**
@@ -1646,7 +1667,7 @@ Defined in: [src/lib/db/chat/types.ts:723](https://github.com/anuma-ai/sdk/blob/
> **updateVaultMemory**: (`id`: `string`, `content`: `string`, `scope?`: `string`) => `Promise`<[`StoredVaultMemory`](StoredVaultMemory.md) | `null`>
-Defined in: [src/react/useChatStorage.ts:706](https://github.com/anuma-ai/sdk/blob/main/src/react/useChatStorage.ts#706)
+Defined in: [src/react/useChatStorage.ts:873](https://github.com/anuma-ai/sdk/blob/main/src/react/useChatStorage.ts#873)
Update an existing vault memory's content.
@@ -1727,7 +1748,7 @@ the updated memory, or null if not found
> **vaultEmbeddingCache**: [`VaultEmbeddingCache`](../type-aliases/VaultEmbeddingCache.md)
-Defined in: [src/react/useChatStorage.ts:685](https://github.com/anuma-ai/sdk/blob/main/src/react/useChatStorage.ts#685)
+Defined in: [src/react/useChatStorage.ts:852](https://github.com/anuma-ai/sdk/blob/main/src/react/useChatStorage.ts#852)
The shared vault embedding cache. Use this to eagerly embed content
when saving vault memories (via eagerEmbedContent).
diff --git a/src/content/sdk/react/Internal/interfaces/WatermelonChatStorageAdapterOptions.md b/src/content/sdk/react/Internal/interfaces/WatermelonChatStorageAdapterOptions.md
new file mode 100644
index 00000000..f4cf232a
--- /dev/null
+++ b/src/content/sdk/react/Internal/interfaces/WatermelonChatStorageAdapterOptions.md
@@ -0,0 +1,47 @@
+# WatermelonChatStorageAdapterOptions
+
+Defined in: [src/lib/storage/WatermelonChatStorageAdapter.ts:59](https://github.com/anuma-ai/sdk/blob/main/src/lib/storage/WatermelonChatStorageAdapter.ts#59)
+
+Context needed to construct a `WatermelonChatStorageAdapter`.
+
+Mirrors `StorageOperationsContext` but exposes only the `Database` — the
+adapter resolves the required collections itself so callers don't have to
+know the table names.
+
+## Properties
+
+### database
+
+> **database**: `Database`
+
+Defined in: [src/lib/storage/WatermelonChatStorageAdapter.ts:60](https://github.com/anuma-ai/sdk/blob/main/src/lib/storage/WatermelonChatStorageAdapter.ts#60)
+
+***
+
+### embeddedWalletSigner?
+
+> `optional` **embeddedWalletSigner**: [`EmbeddedWalletSignerFn`](../type-aliases/EmbeddedWalletSignerFn.md)
+
+Defined in: [src/lib/storage/WatermelonChatStorageAdapter.ts:66](https://github.com/anuma-ai/sdk/blob/main/src/lib/storage/WatermelonChatStorageAdapter.ts#66)
+
+Silent signing function for embedded wallets (optional).
+
+***
+
+### signMessage?
+
+> `optional` **signMessage**: [`SignMessageFn`](../type-aliases/SignMessageFn.md)
+
+Defined in: [src/lib/storage/WatermelonChatStorageAdapter.ts:64](https://github.com/anuma-ai/sdk/blob/main/src/lib/storage/WatermelonChatStorageAdapter.ts#64)
+
+Signing function for deriving encryption keys (optional).
+
+***
+
+### walletAddress?
+
+> `optional` **walletAddress**: `string`
+
+Defined in: [src/lib/storage/WatermelonChatStorageAdapter.ts:62](https://github.com/anuma-ai/sdk/blob/main/src/lib/storage/WatermelonChatStorageAdapter.ts#62)
+
+Wallet address for field-level encryption (optional).
diff --git a/src/content/sdk/react/Internal/type-aliases/AnumaChild.md b/src/content/sdk/react/Internal/type-aliases/AnumaChild.md
new file mode 100644
index 00000000..85ae8122
--- /dev/null
+++ b/src/content/sdk/react/Internal/type-aliases/AnumaChild.md
@@ -0,0 +1,5 @@
+# AnumaChild
+
+> **AnumaChild** = [`AnumaNode`](../interfaces/AnumaNode.md) | `string`
+
+Defined in: [src/tools/slides/jsx.ts:52](https://github.com/anuma-ai/sdk/blob/main/src/tools/slides/jsx.ts#52)
diff --git a/src/content/sdk/react/Internal/type-aliases/AttrValue.md b/src/content/sdk/react/Internal/type-aliases/AttrValue.md
new file mode 100644
index 00000000..9ebbd6f3
--- /dev/null
+++ b/src/content/sdk/react/Internal/type-aliases/AttrValue.md
@@ -0,0 +1,5 @@
+# AttrValue
+
+> **AttrValue** = `AttrScalar` | `AttrObject`
+
+Defined in: [src/tools/slides/jsx.ts:50](https://github.com/anuma-ai/sdk/blob/main/src/tools/slides/jsx.ts#50)
diff --git a/src/content/sdk/react/Internal/type-aliases/ChatRole.md b/src/content/sdk/react/Internal/type-aliases/ChatRole.md
index 2a521b6e..3fa4c4ee 100644
--- a/src/content/sdk/react/Internal/type-aliases/ChatRole.md
+++ b/src/content/sdk/react/Internal/type-aliases/ChatRole.md
@@ -2,4 +2,4 @@
> **ChatRole** = `"user"` | `"assistant"` | `"system"`
-Defined in: [src/lib/db/chat/types.ts:53](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#53)
+Defined in: [src/lib/db/chat/types.ts:54](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#54)
diff --git a/src/content/sdk/react/Internal/type-aliases/ClientToolsFilterFn.md b/src/content/sdk/react/Internal/type-aliases/ClientToolsFilterFn.md
index 80103571..83eae5c7 100644
--- a/src/content/sdk/react/Internal/type-aliases/ClientToolsFilterFn.md
+++ b/src/content/sdk/react/Internal/type-aliases/ClientToolsFilterFn.md
@@ -2,7 +2,7 @@
> **ClientToolsFilterFn** = (`embeddings`: `number`\[] | `number`\[]\[] | `null`, `tools`: [`LlmapiChatCompletionTool`](../../../client/Internal/type-aliases/LlmapiChatCompletionTool.md)\[]) => `string`\[]
-Defined in: [src/lib/db/chat/types.ts:46](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#46)
+Defined in: [src/lib/db/chat/types.ts:47](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#47)
Function type for dynamic client tools filtering based on prompt embeddings.
Receives the prompt embedding(s) (or null for short messages where no embedding
diff --git a/src/content/sdk/react/Internal/type-aliases/EmbeddedWalletSignerFn.md b/src/content/sdk/react/Internal/type-aliases/EmbeddedWalletSignerFn.md
index 2015e392..52bbe110 100644
--- a/src/content/sdk/react/Internal/type-aliases/EmbeddedWalletSignerFn.md
+++ b/src/content/sdk/react/Internal/type-aliases/EmbeddedWalletSignerFn.md
@@ -2,7 +2,7 @@
> **EmbeddedWalletSignerFn** = (`message`: `string`, `options?`: [`SignMessageOptions`](../interfaces/SignMessageOptions.md)) => `Promise`<`string`>
-Defined in: [src/react/useEncryption.ts:711](https://github.com/anuma-ai/sdk/blob/main/src/react/useEncryption.ts#711)
+Defined in: [src/react/useEncryption.ts:845](https://github.com/anuma-ai/sdk/blob/main/src/react/useEncryption.ts#845)
Type for embedded wallet signer function that enables silent signing.
For Privy embedded wallets, this can sign programmatically without user interaction
diff --git a/src/content/sdk/react/Internal/type-aliases/KnownTag.md b/src/content/sdk/react/Internal/type-aliases/KnownTag.md
new file mode 100644
index 00000000..a6ee6776
--- /dev/null
+++ b/src/content/sdk/react/Internal/type-aliases/KnownTag.md
@@ -0,0 +1,5 @@
+# KnownTag
+
+> **KnownTag** = *typeof* `ANUMA_TAGS`\[`number`]
+
+Defined in: [src/tools/slides/jsx.ts:116](https://github.com/anuma-ai/sdk/blob/main/src/tools/slides/jsx.ts#116)
diff --git a/src/content/sdk/react/Internal/type-aliases/MessageFeedback.md b/src/content/sdk/react/Internal/type-aliases/MessageFeedback.md
index b37f4836..24948796 100644
--- a/src/content/sdk/react/Internal/type-aliases/MessageFeedback.md
+++ b/src/content/sdk/react/Internal/type-aliases/MessageFeedback.md
@@ -2,7 +2,7 @@
> **MessageFeedback** = `"like"` | `"dislike"` | `null`
-Defined in: [src/lib/db/chat/types.ts:61](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#61)
+Defined in: [src/lib/db/chat/types.ts:62](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#62)
Feedback type for message like/dislike.
diff --git a/src/content/sdk/react/Internal/type-aliases/SendMessageWithStorageResult.md b/src/content/sdk/react/Internal/type-aliases/SendMessageWithStorageResult.md
index 238ab4e9..3810b770 100644
--- a/src/content/sdk/react/Internal/type-aliases/SendMessageWithStorageResult.md
+++ b/src/content/sdk/react/Internal/type-aliases/SendMessageWithStorageResult.md
@@ -2,7 +2,7 @@
> **SendMessageWithStorageResult** = { `assistantMessage`: [`StoredMessage`](../interfaces/StoredMessage.md); `autoExecutedToolResults?`: `object`\[]; `data`: `ApiResponse`; `error`: `null`; `userMessage`: [`StoredMessage`](../interfaces/StoredMessage.md); } | { `assistantMessage?`: `undefined`; `data`: `ApiResponse`; `error`: `null`; `skipped`: `true`; `userMessage?`: `undefined`; } | { `assistantMessage?`: `undefined`; `data`: `null`; `error`: `string`; `userMessage?`: [`StoredMessage`](../interfaces/StoredMessage.md); }
-Defined in: [src/react/useChatStorage.ts:552](https://github.com/anuma-ai/sdk/blob/main/src/react/useChatStorage.ts#552)
+Defined in: [src/react/useChatStorage.ts:719](https://github.com/anuma-ai/sdk/blob/main/src/react/useChatStorage.ts#719)
Result from sendMessage with storage (React version)
The `data` field contains the raw server response which includes `tools_checksum`.
diff --git a/src/content/sdk/react/Internal/type-aliases/ServerToolsFilter.md b/src/content/sdk/react/Internal/type-aliases/ServerToolsFilter.md
index 933ca91e..5b8eccf1 100644
--- a/src/content/sdk/react/Internal/type-aliases/ServerToolsFilter.md
+++ b/src/content/sdk/react/Internal/type-aliases/ServerToolsFilter.md
@@ -2,7 +2,7 @@
> **ServerToolsFilter** = `string`\[] | [`ServerToolsFilterFn`](ServerToolsFilterFn.md)
-Defined in: [src/lib/db/chat/types.ts:35](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#35)
+Defined in: [src/lib/db/chat/types.ts:36](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#36)
Server tools filter: static list of names or dynamic function.
diff --git a/src/content/sdk/react/Internal/type-aliases/ServerToolsFilterFn.md b/src/content/sdk/react/Internal/type-aliases/ServerToolsFilterFn.md
index f8c66e62..b6daf8f6 100644
--- a/src/content/sdk/react/Internal/type-aliases/ServerToolsFilterFn.md
+++ b/src/content/sdk/react/Internal/type-aliases/ServerToolsFilterFn.md
@@ -2,7 +2,7 @@
> **ServerToolsFilterFn** = (`embeddings`: `number`\[] | `number`\[]\[], `tools`: [`ServerTool`](../interfaces/ServerTool.md)\[]) => `string`\[]
-Defined in: [src/lib/db/chat/types.ts:25](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#25)
+Defined in: [src/lib/db/chat/types.ts:26](https://github.com/anuma-ai/sdk/blob/main/src/lib/db/chat/types.ts#26)
Function type for dynamic server tools filtering based on prompt embeddings.
Receives the prompt embedding(s) and all available tools, returns tool names to include.
diff --git a/src/content/sdk/react/Internal/type-aliases/ServerToolsFilterFunction.md b/src/content/sdk/react/Internal/type-aliases/ServerToolsFilterFunction.md
new file mode 100644
index 00000000..2fea3653
--- /dev/null
+++ b/src/content/sdk/react/Internal/type-aliases/ServerToolsFilterFunction.md
@@ -0,0 +1,50 @@
+# ServerToolsFilterFunction
+
+> **ServerToolsFilterFunction** = (`embeddings`: `number`\[] | `number`\[]\[], `tools`: [`ServerTool`](../interfaces/ServerTool.md)\[]) => `string`\[]
+
+Defined in: [src/lib/tools/serverTools.ts:1123](https://github.com/anuma-ai/sdk/blob/main/src/lib/tools/serverTools.ts#1123)
+
+Type for a server-tools filter — a function that takes prompt embeddings
+and the full server tool catalog and returns the names of tools to keep.
+Matches `useChatStorage`'s `serverTools` callback signature.
+
+## Parameters
+
+