@molroo-io/sdk 0.5.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +251 -0
- package/dist/cjs/api-client.d.ts +23 -0
- package/dist/cjs/api-client.d.ts.map +1 -0
- package/dist/cjs/api-client.js +55 -0
- package/dist/cjs/defaults/index.d.ts +8 -0
- package/dist/cjs/defaults/index.d.ts.map +1 -0
- package/dist/cjs/defaults/index.js +30 -0
- package/dist/cjs/defaults/persona.json +17 -0
- package/dist/cjs/embedding/cloudflare.d.ts +15 -0
- package/dist/cjs/embedding/cloudflare.d.ts.map +1 -0
- package/dist/cjs/embedding/cloudflare.js +16 -0
- package/dist/cjs/embedding/cohere.d.ts +8 -0
- package/dist/cjs/embedding/cohere.d.ts.map +1 -0
- package/dist/cjs/embedding/cohere.js +31 -0
- package/dist/cjs/embedding/index.d.ts +9 -0
- package/dist/cjs/embedding/index.d.ts.map +1 -0
- package/dist/cjs/embedding/index.js +11 -0
- package/dist/cjs/embedding/local.d.ts +6 -0
- package/dist/cjs/embedding/local.d.ts.map +1 -0
- package/dist/cjs/embedding/local.js +28 -0
- package/dist/cjs/embedding/openai.d.ts +9 -0
- package/dist/cjs/embedding/openai.d.ts.map +1 -0
- package/dist/cjs/embedding/openai.js +26 -0
- package/dist/cjs/errors.d.ts +17 -0
- package/dist/cjs/errors.d.ts.map +1 -0
- package/dist/cjs/errors.js +21 -0
- package/dist/cjs/events/console.d.ts +25 -0
- package/dist/cjs/events/console.d.ts.map +1 -0
- package/dist/cjs/events/console.js +41 -0
- package/dist/cjs/events/types.d.ts +28 -0
- package/dist/cjs/events/types.d.ts.map +1 -0
- package/dist/cjs/events/types.js +13 -0
- package/dist/cjs/events/webhook.d.ts +30 -0
- package/dist/cjs/events/webhook.d.ts.map +1 -0
- package/dist/cjs/events/webhook.js +79 -0
- package/dist/cjs/generate/persona.d.ts +16 -0
- package/dist/cjs/generate/persona.d.ts.map +1 -0
- package/dist/cjs/generate/persona.js +42 -0
- package/dist/cjs/generate/prompt.d.ts +7 -0
- package/dist/cjs/generate/prompt.d.ts.map +1 -0
- package/dist/cjs/generate/prompt.js +41 -0
- package/dist/cjs/generate/schema.d.ts +32 -0
- package/dist/cjs/generate/schema.d.ts.map +1 -0
- package/dist/cjs/generate/schema.js +54 -0
- package/dist/cjs/generated/index.d.ts +2 -0
- package/dist/cjs/generated/index.d.ts.map +1 -0
- package/dist/cjs/generated/index.js +2 -0
- package/dist/cjs/index.d.ts +66 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +69 -0
- package/dist/cjs/llm/adapter.d.ts +61 -0
- package/dist/cjs/llm/adapter.d.ts.map +1 -0
- package/dist/cjs/llm/adapter.js +2 -0
- package/dist/cjs/llm/resolve.d.ts +28 -0
- package/dist/cjs/llm/resolve.d.ts.map +1 -0
- package/dist/cjs/llm/resolve.js +20 -0
- package/dist/cjs/llm/schema.d.ts +60 -0
- package/dist/cjs/llm/schema.d.ts.map +1 -0
- package/dist/cjs/llm/schema.js +72 -0
- package/dist/cjs/llm/types.d.ts +24 -0
- package/dist/cjs/llm/types.d.ts.map +1 -0
- package/dist/cjs/llm/types.js +2 -0
- package/dist/cjs/llm/vercel-ai/adapter.d.ts +29 -0
- package/dist/cjs/llm/vercel-ai/adapter.d.ts.map +1 -0
- package/dist/cjs/llm/vercel-ai/adapter.js +234 -0
- package/dist/cjs/llm/vercel-ai/config.d.ts +9 -0
- package/dist/cjs/llm/vercel-ai/config.d.ts.map +1 -0
- package/dist/cjs/llm/vercel-ai/config.js +2 -0
- package/dist/cjs/llm/vercel-ai/index.d.ts +9 -0
- package/dist/cjs/llm/vercel-ai/index.d.ts.map +1 -0
- package/dist/cjs/llm/vercel-ai/index.js +13 -0
- package/dist/cjs/memory/cloudflare/index.d.ts +3 -0
- package/dist/cjs/memory/cloudflare/index.d.ts.map +1 -0
- package/dist/cjs/memory/cloudflare/index.js +5 -0
- package/dist/cjs/memory/cloudflare/vectorize.d.ts +62 -0
- package/dist/cjs/memory/cloudflare/vectorize.d.ts.map +1 -0
- package/dist/cjs/memory/cloudflare/vectorize.js +55 -0
- package/dist/cjs/memory/in-memory-semantic.d.ts +16 -0
- package/dist/cjs/memory/in-memory-semantic.d.ts.map +1 -0
- package/dist/cjs/memory/in-memory-semantic.js +57 -0
- package/dist/cjs/memory/in-memory.d.ts +46 -0
- package/dist/cjs/memory/in-memory.d.ts.map +1 -0
- package/dist/cjs/memory/in-memory.js +115 -0
- package/dist/cjs/memory/pinecone/index.d.ts +7 -0
- package/dist/cjs/memory/pinecone/index.d.ts.map +1 -0
- package/dist/cjs/memory/pinecone/index.js +8 -0
- package/dist/cjs/memory/pinecone/memory-adapter.d.ts +62 -0
- package/dist/cjs/memory/pinecone/memory-adapter.d.ts.map +1 -0
- package/dist/cjs/memory/pinecone/memory-adapter.js +220 -0
- package/dist/cjs/memory/pinecone/semantic.d.ts +44 -0
- package/dist/cjs/memory/pinecone/semantic.d.ts.map +1 -0
- package/dist/cjs/memory/pinecone/semantic.js +90 -0
- package/dist/cjs/memory/recall.d.ts +58 -0
- package/dist/cjs/memory/recall.d.ts.map +1 -0
- package/dist/cjs/memory/recall.js +220 -0
- package/dist/cjs/memory/semantic.d.ts +24 -0
- package/dist/cjs/memory/semantic.d.ts.map +1 -0
- package/dist/cjs/memory/semantic.js +2 -0
- package/dist/cjs/memory/sqlite/index.d.ts +3 -0
- package/dist/cjs/memory/sqlite/index.d.ts.map +1 -0
- package/dist/cjs/memory/sqlite/index.js +5 -0
- package/dist/cjs/memory/sqlite/memory-adapter.d.ts +58 -0
- package/dist/cjs/memory/sqlite/memory-adapter.d.ts.map +1 -0
- package/dist/cjs/memory/sqlite/memory-adapter.js +336 -0
- package/dist/cjs/memory/sqlite/schema.d.ts +4 -0
- package/dist/cjs/memory/sqlite/schema.d.ts.map +1 -0
- package/dist/cjs/memory/sqlite/schema.js +91 -0
- package/dist/cjs/memory/supabase/index.d.ts +7 -0
- package/dist/cjs/memory/supabase/index.d.ts.map +1 -0
- package/dist/cjs/memory/supabase/index.js +8 -0
- package/dist/cjs/memory/supabase/memory-adapter.d.ts +67 -0
- package/dist/cjs/memory/supabase/memory-adapter.d.ts.map +1 -0
- package/dist/cjs/memory/supabase/memory-adapter.js +335 -0
- package/dist/cjs/memory/supabase/semantic.d.ts +44 -0
- package/dist/cjs/memory/supabase/semantic.d.ts.map +1 -0
- package/dist/cjs/memory/supabase/semantic.js +72 -0
- package/dist/cjs/memory/types.d.ts +231 -0
- package/dist/cjs/memory/types.d.ts.map +1 -0
- package/dist/cjs/memory/types.js +12 -0
- package/dist/cjs/persona.d.ts +326 -0
- package/dist/cjs/persona.d.ts.map +1 -0
- package/dist/cjs/persona.js +824 -0
- package/dist/cjs/types.d.ts +263 -0
- package/dist/cjs/types.d.ts.map +1 -0
- package/dist/cjs/types.js +15 -0
- package/dist/cjs/world/client.d.ts +36 -0
- package/dist/cjs/world/client.d.ts.map +1 -0
- package/dist/cjs/world/client.js +59 -0
- package/dist/cjs/world/errors.d.ts +9 -0
- package/dist/cjs/world/errors.d.ts.map +1 -0
- package/dist/cjs/world/errors.js +15 -0
- package/dist/cjs/world/index.d.ts +10 -0
- package/dist/cjs/world/index.d.ts.map +1 -0
- package/dist/cjs/world/index.js +16 -0
- package/dist/cjs/world/types.d.ts +101 -0
- package/dist/cjs/world/types.d.ts.map +1 -0
- package/dist/cjs/world/types.js +8 -0
- package/dist/cjs/world/village.d.ts +75 -0
- package/dist/cjs/world/village.d.ts.map +1 -0
- package/dist/cjs/world/village.js +278 -0
- package/dist/cjs/world/world-persona.d.ts +182 -0
- package/dist/cjs/world/world-persona.d.ts.map +1 -0
- package/dist/cjs/world/world-persona.js +192 -0
- package/dist/cjs/world/world.d.ts +41 -0
- package/dist/cjs/world/world.d.ts.map +1 -0
- package/dist/cjs/world/world.js +91 -0
- package/dist/esm/api-client.d.ts +23 -0
- package/dist/esm/api-client.d.ts.map +1 -0
- package/dist/esm/api-client.js +48 -0
- package/dist/esm/defaults/index.d.ts +8 -0
- package/dist/esm/defaults/index.d.ts.map +1 -0
- package/dist/esm/defaults/index.js +23 -0
- package/dist/esm/defaults/persona.json +17 -0
- package/dist/esm/embedding/cloudflare.d.ts +15 -0
- package/dist/esm/embedding/cloudflare.d.ts.map +1 -0
- package/dist/esm/embedding/cloudflare.js +13 -0
- package/dist/esm/embedding/cohere.d.ts +8 -0
- package/dist/esm/embedding/cohere.d.ts.map +1 -0
- package/dist/esm/embedding/cohere.js +28 -0
- package/dist/esm/embedding/index.d.ts +9 -0
- package/dist/esm/embedding/index.d.ts.map +1 -0
- package/dist/esm/embedding/index.js +4 -0
- package/dist/esm/embedding/local.d.ts +6 -0
- package/dist/esm/embedding/local.d.ts.map +1 -0
- package/dist/esm/embedding/local.js +25 -0
- package/dist/esm/embedding/openai.d.ts +9 -0
- package/dist/esm/embedding/openai.d.ts.map +1 -0
- package/dist/esm/embedding/openai.js +23 -0
- package/dist/esm/errors.d.ts +17 -0
- package/dist/esm/errors.d.ts.map +1 -0
- package/dist/esm/errors.js +17 -0
- package/dist/esm/events/console.d.ts +25 -0
- package/dist/esm/events/console.d.ts.map +1 -0
- package/dist/esm/events/console.js +37 -0
- package/dist/esm/events/types.d.ts +28 -0
- package/dist/esm/events/types.d.ts.map +1 -0
- package/dist/esm/events/types.js +12 -0
- package/dist/esm/events/webhook.d.ts +30 -0
- package/dist/esm/events/webhook.d.ts.map +1 -0
- package/dist/esm/events/webhook.js +75 -0
- package/dist/esm/generate/persona.d.ts +16 -0
- package/dist/esm/generate/persona.d.ts.map +1 -0
- package/dist/esm/generate/persona.js +39 -0
- package/dist/esm/generate/prompt.d.ts +7 -0
- package/dist/esm/generate/prompt.d.ts.map +1 -0
- package/dist/esm/generate/prompt.js +38 -0
- package/dist/esm/generate/schema.d.ts +32 -0
- package/dist/esm/generate/schema.d.ts.map +1 -0
- package/dist/esm/generate/schema.js +51 -0
- package/dist/esm/generated/index.d.ts +2 -0
- package/dist/esm/generated/index.d.ts.map +1 -0
- package/dist/esm/generated/index.js +1 -0
- package/dist/esm/index.d.ts +66 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +49 -0
- package/dist/esm/llm/adapter.d.ts +61 -0
- package/dist/esm/llm/adapter.d.ts.map +1 -0
- package/dist/esm/llm/adapter.js +1 -0
- package/dist/esm/llm/resolve.d.ts +28 -0
- package/dist/esm/llm/resolve.d.ts.map +1 -0
- package/dist/esm/llm/resolve.js +17 -0
- package/dist/esm/llm/schema.d.ts +60 -0
- package/dist/esm/llm/schema.d.ts.map +1 -0
- package/dist/esm/llm/schema.js +69 -0
- package/dist/esm/llm/types.d.ts +24 -0
- package/dist/esm/llm/types.d.ts.map +1 -0
- package/dist/esm/llm/types.js +1 -0
- package/dist/esm/llm/vercel-ai/adapter.d.ts +29 -0
- package/dist/esm/llm/vercel-ai/adapter.d.ts.map +1 -0
- package/dist/esm/llm/vercel-ai/adapter.js +196 -0
- package/dist/esm/llm/vercel-ai/config.d.ts +9 -0
- package/dist/esm/llm/vercel-ai/config.d.ts.map +1 -0
- package/dist/esm/llm/vercel-ai/config.js +1 -0
- package/dist/esm/llm/vercel-ai/index.d.ts +9 -0
- package/dist/esm/llm/vercel-ai/index.d.ts.map +1 -0
- package/dist/esm/llm/vercel-ai/index.js +8 -0
- package/dist/esm/memory/cloudflare/index.d.ts +3 -0
- package/dist/esm/memory/cloudflare/index.d.ts.map +1 -0
- package/dist/esm/memory/cloudflare/index.js +1 -0
- package/dist/esm/memory/cloudflare/vectorize.d.ts +62 -0
- package/dist/esm/memory/cloudflare/vectorize.d.ts.map +1 -0
- package/dist/esm/memory/cloudflare/vectorize.js +51 -0
- package/dist/esm/memory/in-memory-semantic.d.ts +16 -0
- package/dist/esm/memory/in-memory-semantic.d.ts.map +1 -0
- package/dist/esm/memory/in-memory-semantic.js +53 -0
- package/dist/esm/memory/in-memory.d.ts +46 -0
- package/dist/esm/memory/in-memory.d.ts.map +1 -0
- package/dist/esm/memory/in-memory.js +111 -0
- package/dist/esm/memory/pinecone/index.d.ts +7 -0
- package/dist/esm/memory/pinecone/index.d.ts.map +1 -0
- package/dist/esm/memory/pinecone/index.js +3 -0
- package/dist/esm/memory/pinecone/memory-adapter.d.ts +62 -0
- package/dist/esm/memory/pinecone/memory-adapter.d.ts.map +1 -0
- package/dist/esm/memory/pinecone/memory-adapter.js +216 -0
- package/dist/esm/memory/pinecone/semantic.d.ts +44 -0
- package/dist/esm/memory/pinecone/semantic.d.ts.map +1 -0
- package/dist/esm/memory/pinecone/semantic.js +86 -0
- package/dist/esm/memory/recall.d.ts +58 -0
- package/dist/esm/memory/recall.d.ts.map +1 -0
- package/dist/esm/memory/recall.js +215 -0
- package/dist/esm/memory/semantic.d.ts +24 -0
- package/dist/esm/memory/semantic.d.ts.map +1 -0
- package/dist/esm/memory/semantic.js +1 -0
- package/dist/esm/memory/sqlite/index.d.ts +3 -0
- package/dist/esm/memory/sqlite/index.d.ts.map +1 -0
- package/dist/esm/memory/sqlite/index.js +1 -0
- package/dist/esm/memory/sqlite/memory-adapter.d.ts +58 -0
- package/dist/esm/memory/sqlite/memory-adapter.d.ts.map +1 -0
- package/dist/esm/memory/sqlite/memory-adapter.js +296 -0
- package/dist/esm/memory/sqlite/schema.d.ts +4 -0
- package/dist/esm/memory/sqlite/schema.d.ts.map +1 -0
- package/dist/esm/memory/sqlite/schema.js +86 -0
- package/dist/esm/memory/supabase/index.d.ts +7 -0
- package/dist/esm/memory/supabase/index.d.ts.map +1 -0
- package/dist/esm/memory/supabase/index.js +3 -0
- package/dist/esm/memory/supabase/memory-adapter.d.ts +67 -0
- package/dist/esm/memory/supabase/memory-adapter.d.ts.map +1 -0
- package/dist/esm/memory/supabase/memory-adapter.js +331 -0
- package/dist/esm/memory/supabase/semantic.d.ts +44 -0
- package/dist/esm/memory/supabase/semantic.d.ts.map +1 -0
- package/dist/esm/memory/supabase/semantic.js +68 -0
- package/dist/esm/memory/types.d.ts +231 -0
- package/dist/esm/memory/types.d.ts.map +1 -0
- package/dist/esm/memory/types.js +9 -0
- package/dist/esm/persona.d.ts +326 -0
- package/dist/esm/persona.d.ts.map +1 -0
- package/dist/esm/persona.js +787 -0
- package/dist/esm/types.d.ts +263 -0
- package/dist/esm/types.d.ts.map +1 -0
- package/dist/esm/types.js +11 -0
- package/dist/esm/world/client.d.ts +36 -0
- package/dist/esm/world/client.d.ts.map +1 -0
- package/dist/esm/world/client.js +52 -0
- package/dist/esm/world/errors.d.ts +9 -0
- package/dist/esm/world/errors.d.ts.map +1 -0
- package/dist/esm/world/errors.js +11 -0
- package/dist/esm/world/index.d.ts +10 -0
- package/dist/esm/world/index.d.ts.map +1 -0
- package/dist/esm/world/index.js +8 -0
- package/dist/esm/world/types.d.ts +101 -0
- package/dist/esm/world/types.d.ts.map +1 -0
- package/dist/esm/world/types.js +7 -0
- package/dist/esm/world/village.d.ts +75 -0
- package/dist/esm/world/village.d.ts.map +1 -0
- package/dist/esm/world/village.js +274 -0
- package/dist/esm/world/world-persona.d.ts +182 -0
- package/dist/esm/world/world-persona.d.ts.map +1 -0
- package/dist/esm/world/world-persona.js +188 -0
- package/dist/esm/world/world.d.ts +41 -0
- package/dist/esm/world/world.d.ts.map +1 -0
- package/dist/esm/world/world.js +87 -0
- package/package.json +207 -0
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
import type { Episode, VAD } from '../types';
|
|
2
|
+
export type { Episode, VAD };
|
|
3
|
+
/**
|
|
4
|
+
* Single-interface memory adapter for the SDK.
|
|
5
|
+
*
|
|
6
|
+
* Duck-type compatible with `@molroo-io/persona`'s `MemoryAdapter`.
|
|
7
|
+
* Implementations (SqliteMemoryAdapter, SupabaseMemoryAdapter, etc.) provide
|
|
8
|
+
* a single object that handles episode storage, recall, and optionally
|
|
9
|
+
* semantic/vector search internally.
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```typescript
|
|
13
|
+
* import { MolrooPersona } from '@molroo-io/sdk';
|
|
14
|
+
*
|
|
15
|
+
* const persona = await MolrooPersona.create({
|
|
16
|
+
* baseUrl: 'https://api.molroo.io',
|
|
17
|
+
* apiKey: 'key',
|
|
18
|
+
* llm,
|
|
19
|
+
* memory: myMemoryAdapter,
|
|
20
|
+
* });
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
23
|
+
export interface MemoryAdapter {
|
|
24
|
+
/** Save an episode returned by the API's AgentResponse. */
|
|
25
|
+
saveEpisode(episode: Episode): Promise<void>;
|
|
26
|
+
/**
|
|
27
|
+
* Recall relevant episodes by structured query.
|
|
28
|
+
* Accepts both SDK `RecallQuery` and `EpisodeQuery` shapes.
|
|
29
|
+
*/
|
|
30
|
+
recall(query: RecallQuery): Promise<Episode[]>;
|
|
31
|
+
/** Save a reflection generated by LLM. Optional — omit for episode-only storage. */
|
|
32
|
+
saveReflection?(reflection: Reflection): Promise<void>;
|
|
33
|
+
/** Retrieve reflections for a source entity. Optional. */
|
|
34
|
+
getReflections?(sourceEntity?: string): Promise<Reflection[]>;
|
|
35
|
+
/**
|
|
36
|
+
* Vector/semantic similarity search. Optional.
|
|
37
|
+
* When provided, the adapter handles embedding internally — no separate
|
|
38
|
+
* EmbeddingAdapter needed.
|
|
39
|
+
*/
|
|
40
|
+
semanticRecall?(query: string, options?: SemanticRecallOptions): Promise<Episode[]>;
|
|
41
|
+
/** Retrieve episodes by IDs. Optional — used for hydrating search results. */
|
|
42
|
+
getByIds?(ids: string[]): Promise<Episode[]>;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Query for recalling episodes from a MemoryAdapter.
|
|
46
|
+
*
|
|
47
|
+
* Compatible with both persona engine's `RecallQuery` (`context` field)
|
|
48
|
+
* and the SDK's `EpisodeQuery` (`contextContains` field).
|
|
49
|
+
*/
|
|
50
|
+
export interface RecallQuery {
|
|
51
|
+
/** Filter by source entity name. */
|
|
52
|
+
sourceEntity?: string;
|
|
53
|
+
/** Search keyword or vector query text (persona engine compatibility). */
|
|
54
|
+
context?: string;
|
|
55
|
+
/** Max episodes to return. Default: implementation-specific. */
|
|
56
|
+
limit?: number;
|
|
57
|
+
/** Minimum importance score to include. */
|
|
58
|
+
minImportance?: number;
|
|
59
|
+
/** Epoch ms range [from, to]. */
|
|
60
|
+
timeRange?: [number, number];
|
|
61
|
+
/** Filter by episode type. Single string or array (OR match). */
|
|
62
|
+
type?: string | string[];
|
|
63
|
+
/** Valence range [min, max]. */
|
|
64
|
+
valenceRange?: [number, number];
|
|
65
|
+
}
|
|
66
|
+
/** Options for semantic/vector recall. */
|
|
67
|
+
export interface SemanticRecallOptions {
|
|
68
|
+
/** Number of results to return. Default: 5. */
|
|
69
|
+
topK?: number;
|
|
70
|
+
/** Minimum similarity score to include. */
|
|
71
|
+
minScore?: number;
|
|
72
|
+
/** Additional structured filters. */
|
|
73
|
+
filter?: Partial<RecallQuery>;
|
|
74
|
+
}
|
|
75
|
+
/** Recall limit configuration, extracted for reuse. */
|
|
76
|
+
export interface RecallLimits {
|
|
77
|
+
/** Max episodic memories per recall. Default: 5. */
|
|
78
|
+
episodicLimit?: number;
|
|
79
|
+
/** Max semantic results per recall. Default: 3. */
|
|
80
|
+
semanticLimit?: number;
|
|
81
|
+
/** Max reflections per recall. Default: 3. */
|
|
82
|
+
reflectionLimit?: number;
|
|
83
|
+
/** Minimum importance threshold. Default: 0. */
|
|
84
|
+
minImportance?: number;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Type guard: returns true if the memory config is a `MemoryConfig` (split adapters),
|
|
88
|
+
* false if it's a `MemoryAdapter` (single adapter).
|
|
89
|
+
*
|
|
90
|
+
* Discriminates by checking for `saveEpisode` — present on MemoryAdapter, absent on MemoryConfig.
|
|
91
|
+
*/
|
|
92
|
+
export declare function isMemoryConfig(m: MemoryAdapter | MemoryConfig): m is MemoryConfig;
|
|
93
|
+
/**
|
|
94
|
+
* EpisodeAdapter — RDB-backed structured episode storage.
|
|
95
|
+
*
|
|
96
|
+
* Required adapter for the split `MemoryConfig` approach. Handles saving and
|
|
97
|
+
* recalling episodic memories (conversation episodes + reflections).
|
|
98
|
+
*
|
|
99
|
+
* Implementations: InMemoryEpisodeAdapter (built-in), or consumer-provided
|
|
100
|
+
* (SQLite, PostgreSQL, Supabase, etc.).
|
|
101
|
+
*/
|
|
102
|
+
export interface EpisodeAdapter {
|
|
103
|
+
/** Save an episode returned by the API's AgentResponse. */
|
|
104
|
+
saveEpisode(episode: Episode): Promise<void>;
|
|
105
|
+
/** Recall relevant episodes by structured query (time-ordered). */
|
|
106
|
+
recall(query: EpisodeQuery): Promise<Episode[]>;
|
|
107
|
+
/** Retrieve episodes by IDs — used for hydrating SemanticStore results. */
|
|
108
|
+
getByIds?(ids: string[]): Promise<Episode[]>;
|
|
109
|
+
/** Save a reflection generated by LLM. */
|
|
110
|
+
saveReflection(reflection: Reflection): Promise<void>;
|
|
111
|
+
/** Retrieve reflections for a source entity. */
|
|
112
|
+
getReflections(sourceEntity?: string, limit?: number): Promise<Reflection[]>;
|
|
113
|
+
}
|
|
114
|
+
/** Structured query for episodic recall (RDB-style filtering). */
|
|
115
|
+
export interface EpisodeQuery {
|
|
116
|
+
/** Filter by source entity name. */
|
|
117
|
+
sourceEntity?: string;
|
|
118
|
+
/** LIKE search on episode context (not semantic). */
|
|
119
|
+
contextContains?: string;
|
|
120
|
+
/** Filter by episode type. Single string or array (OR match). */
|
|
121
|
+
type?: string | string[];
|
|
122
|
+
/** Max episodes to return. Default: 10. */
|
|
123
|
+
limit?: number;
|
|
124
|
+
/** Minimum importance score to include. */
|
|
125
|
+
minImportance?: number;
|
|
126
|
+
/** Epoch ms range [from, to]. */
|
|
127
|
+
timeRange?: [number, number];
|
|
128
|
+
/** Valence range [min, max]. */
|
|
129
|
+
valenceRange?: [number, number];
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* SemanticAdapter — Vector DB-backed semantic search.
|
|
133
|
+
*
|
|
134
|
+
* Optional adapter for similarity-based memory recall.
|
|
135
|
+
* Requires an EmbeddingAdapter to be configured alongside.
|
|
136
|
+
*
|
|
137
|
+
* Implementations: consumer-provided (Pinecone, pgvector, ChromaDB, etc.).
|
|
138
|
+
*/
|
|
139
|
+
export interface SemanticAdapter {
|
|
140
|
+
/** Index a semantic entry (episode or reflection embedding). */
|
|
141
|
+
index(entry: SemanticEntry): Promise<void>;
|
|
142
|
+
/** Search for semantically similar entries. */
|
|
143
|
+
search(query: SemanticQuery): Promise<SemanticResult[]>;
|
|
144
|
+
}
|
|
145
|
+
/** Entry to index in the vector store. */
|
|
146
|
+
export interface SemanticEntry {
|
|
147
|
+
id: string;
|
|
148
|
+
embedding: number[];
|
|
149
|
+
metadata: {
|
|
150
|
+
type: 'episode' | 'reflection';
|
|
151
|
+
sourceEntity?: string;
|
|
152
|
+
timestamp: number;
|
|
153
|
+
importance?: number;
|
|
154
|
+
/** Episode type tag (e.g. 'chat_message', 'attack', 'gift'). */
|
|
155
|
+
episodeType?: string;
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
/** Query for semantic similarity search. */
|
|
159
|
+
export interface SemanticQuery {
|
|
160
|
+
embedding: number[];
|
|
161
|
+
/** Number of results to return. Default: 5. */
|
|
162
|
+
topK?: number;
|
|
163
|
+
filter?: {
|
|
164
|
+
type?: 'episode' | 'reflection';
|
|
165
|
+
sourceEntity?: string;
|
|
166
|
+
minImportance?: number;
|
|
167
|
+
/** Filter by episode type tag. */
|
|
168
|
+
episodeType?: string;
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
/** Result from semantic similarity search. */
|
|
172
|
+
export interface SemanticResult {
|
|
173
|
+
id: string;
|
|
174
|
+
score: number;
|
|
175
|
+
metadata: SemanticEntry['metadata'];
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* EmbeddingAdapter — generates vector embeddings from text.
|
|
179
|
+
*
|
|
180
|
+
* Required when using SemanticAdapter. Consumer provides their own
|
|
181
|
+
* embedding model (OpenAI, Cohere, local, etc.).
|
|
182
|
+
*/
|
|
183
|
+
export interface EmbeddingAdapter {
|
|
184
|
+
/** Generate an embedding vector from text. */
|
|
185
|
+
embed(text: string): Promise<number[]>;
|
|
186
|
+
/** Dimensionality of the embedding vectors. */
|
|
187
|
+
readonly dimension: number;
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* MemoryConfig — split-adapter configuration for the SDK memory system.
|
|
191
|
+
*
|
|
192
|
+
* At minimum, provide an `episodes` adapter. Optionally add `semantic`
|
|
193
|
+
* + `embedding` for similarity-based recall.
|
|
194
|
+
*
|
|
195
|
+
* For simpler setup, pass a single `MemoryAdapter` instead of `MemoryConfig`.
|
|
196
|
+
*/
|
|
197
|
+
export interface MemoryConfig {
|
|
198
|
+
/** Required: structured episode storage (RDB-backed). */
|
|
199
|
+
episodes: EpisodeAdapter;
|
|
200
|
+
/** Optional: vector similarity search. Requires `embedding` to be set. */
|
|
201
|
+
semantic?: SemanticAdapter;
|
|
202
|
+
/** Optional: embedding adapter. Required when `semantic` is set. */
|
|
203
|
+
embedding?: EmbeddingAdapter;
|
|
204
|
+
/** Optional: recall tuning parameters. */
|
|
205
|
+
recall?: RecallLimits;
|
|
206
|
+
}
|
|
207
|
+
export interface Reflection {
|
|
208
|
+
id: string;
|
|
209
|
+
timestamp: number;
|
|
210
|
+
sourceEntity?: string;
|
|
211
|
+
content: string;
|
|
212
|
+
trigger: string;
|
|
213
|
+
emotionSnapshot: VAD;
|
|
214
|
+
}
|
|
215
|
+
/** @deprecated Use EpisodeAdapter */
|
|
216
|
+
export type EpisodeStore = EpisodeAdapter;
|
|
217
|
+
/** @deprecated Use SemanticAdapter */
|
|
218
|
+
export type SemanticStore = SemanticAdapter;
|
|
219
|
+
/** @deprecated Use EmbeddingAdapter */
|
|
220
|
+
export type EmbeddingProvider = EmbeddingAdapter;
|
|
221
|
+
export interface EpisodePatch {
|
|
222
|
+
importance?: number;
|
|
223
|
+
intensity?: number;
|
|
224
|
+
emotionSnapshot?: VAD;
|
|
225
|
+
}
|
|
226
|
+
export interface CountQuery {
|
|
227
|
+
sourceEntity?: string;
|
|
228
|
+
context?: string;
|
|
229
|
+
timeRange?: [number, number];
|
|
230
|
+
}
|
|
231
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/memory/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Type guard: returns true if the memory config is a `MemoryConfig` (split adapters),
|
|
3
|
+
* false if it's a `MemoryAdapter` (single adapter).
|
|
4
|
+
*
|
|
5
|
+
* Discriminates by checking for `saveEpisode` — present on MemoryAdapter, absent on MemoryConfig.
|
|
6
|
+
*/
|
|
7
|
+
export function isMemoryConfig(m) {
|
|
8
|
+
return !('saveEpisode' in m);
|
|
9
|
+
}
|
|
@@ -0,0 +1,326 @@
|
|
|
1
|
+
import type { LLMAdapter } from './llm/adapter';
|
|
2
|
+
import type { Message } from './llm/adapter';
|
|
3
|
+
import { type LLMInput } from './llm/resolve';
|
|
4
|
+
import type { MemoryConfig, MemoryAdapter, RecallLimits } from './memory/types';
|
|
5
|
+
import type { EventAdapter } from './events/types';
|
|
6
|
+
import type { AgentResponse, AppraisalVector, InterlocutorContext, PersonaSnapshot, PersonaConfigData, PerceiveOptions } from './types';
|
|
7
|
+
/** Configuration for connecting to a standalone persona instance. */
|
|
8
|
+
export interface MolrooPersonaConfig {
|
|
9
|
+
/** Base URL of the molroo API (e.g., 'https://api.molroo.io'). */
|
|
10
|
+
baseUrl: string;
|
|
11
|
+
/** API key for authentication. */
|
|
12
|
+
apiKey: string;
|
|
13
|
+
/** Persona instance ID. Set automatically by {@link MolrooPersona.create}. */
|
|
14
|
+
personaId?: string;
|
|
15
|
+
/**
|
|
16
|
+
* Memory configuration.
|
|
17
|
+
*
|
|
18
|
+
* Pass a single `MemoryAdapter` for the simplest setup:
|
|
19
|
+
* ```typescript
|
|
20
|
+
* memory: new SqliteMemoryAdapter({ dbPath: './memory.db' })
|
|
21
|
+
* ```
|
|
22
|
+
*
|
|
23
|
+
* Or pass a `MemoryConfig` for split-adapter setup:
|
|
24
|
+
* ```typescript
|
|
25
|
+
* memory: { episodes: adapter, semantic: vectorStore, embedding: embeddingProvider }
|
|
26
|
+
* ```
|
|
27
|
+
*/
|
|
28
|
+
memory?: MemoryAdapter | MemoryConfig;
|
|
29
|
+
/**
|
|
30
|
+
* Recall limits when using a single MemoryAdapter.
|
|
31
|
+
* Ignored when memory is a MemoryConfig (use `memory.recall` instead).
|
|
32
|
+
*/
|
|
33
|
+
recall?: RecallLimits;
|
|
34
|
+
/**
|
|
35
|
+
* Event adapter for emitting persona-scoped events (emotion_changed,
|
|
36
|
+
* memory_consolidated, reflection_generated, etc.).
|
|
37
|
+
*/
|
|
38
|
+
events?: EventAdapter;
|
|
39
|
+
}
|
|
40
|
+
/** Summary of a persona instance, returned by list operations. */
|
|
41
|
+
export interface PersonaSummary {
|
|
42
|
+
id: string;
|
|
43
|
+
tenantId: string;
|
|
44
|
+
config: PersonaConfigData;
|
|
45
|
+
engineVersion: string;
|
|
46
|
+
createdAt: number;
|
|
47
|
+
}
|
|
48
|
+
/** Current emotional and psychological state of a persona. */
|
|
49
|
+
export interface PersonaState {
|
|
50
|
+
/** Current emotion in VAD (Valence-Arousal-Dominance) space with discrete label. */
|
|
51
|
+
emotion: {
|
|
52
|
+
vad: {
|
|
53
|
+
V: number;
|
|
54
|
+
A: number;
|
|
55
|
+
D: number;
|
|
56
|
+
};
|
|
57
|
+
discrete?: {
|
|
58
|
+
primary: string;
|
|
59
|
+
secondary?: string;
|
|
60
|
+
intensity: number;
|
|
61
|
+
};
|
|
62
|
+
};
|
|
63
|
+
/** Background mood (slower-changing than emotion). */
|
|
64
|
+
mood?: {
|
|
65
|
+
vad: {
|
|
66
|
+
V: number;
|
|
67
|
+
A: number;
|
|
68
|
+
D: number;
|
|
69
|
+
};
|
|
70
|
+
};
|
|
71
|
+
/** Active somatic (body) sensations. */
|
|
72
|
+
somatic?: string[];
|
|
73
|
+
/** Narrative self-perception (tone, agency, coherence). */
|
|
74
|
+
narrative?: {
|
|
75
|
+
tone: number;
|
|
76
|
+
agency: number;
|
|
77
|
+
coherence: number;
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
/** Result of a persona chat interaction, including LLM text and emotion data. */
|
|
81
|
+
export interface PersonaChatResult {
|
|
82
|
+
/** LLM-generated response text. */
|
|
83
|
+
text: string;
|
|
84
|
+
/** Emotion engine response with VAD, discrete emotion, and side effects. */
|
|
85
|
+
response: AgentResponse;
|
|
86
|
+
/** Persona state at the time of interaction (if available). */
|
|
87
|
+
state?: PersonaState;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* SDK client for interacting with a standalone molroo persona instance.
|
|
91
|
+
*
|
|
92
|
+
* @example
|
|
93
|
+
* ```typescript
|
|
94
|
+
* // Single adapter (recommended)
|
|
95
|
+
* const persona = await MolrooPersona.create(
|
|
96
|
+
* { baseUrl: 'https://api.molroo.io', apiKey: 'key', llm,
|
|
97
|
+
* memory: new SqliteMemoryAdapter({ dbPath: './memory.db' }) },
|
|
98
|
+
* { identity: { name: 'Sera' }, personality: { O: 0.8, C: 0.6, E: 0.7 } },
|
|
99
|
+
* );
|
|
100
|
+
*
|
|
101
|
+
* // Split adapters (advanced)
|
|
102
|
+
* const persona = await MolrooPersona.create(
|
|
103
|
+
* { baseUrl: 'https://api.molroo.io', apiKey: 'key', llm,
|
|
104
|
+
* memory: { episodes: episodeStore, semantic: vectorStore, embedding: embedProvider } },
|
|
105
|
+
* { identity: { name: 'Sera' }, personality: { O: 0.8, C: 0.6, E: 0.7 } },
|
|
106
|
+
* );
|
|
107
|
+
* ```
|
|
108
|
+
*/
|
|
109
|
+
export declare class MolrooPersona {
|
|
110
|
+
private client;
|
|
111
|
+
private llm;
|
|
112
|
+
private engineLlm;
|
|
113
|
+
private memoryAdapter;
|
|
114
|
+
private episodeStore;
|
|
115
|
+
private semanticStore;
|
|
116
|
+
private embeddingProvider;
|
|
117
|
+
private memoryRecallConfig;
|
|
118
|
+
private events;
|
|
119
|
+
private _personaId;
|
|
120
|
+
constructor(config: MolrooPersonaConfig & {
|
|
121
|
+
llm?: LLMAdapter;
|
|
122
|
+
engineLlm?: LLMAdapter;
|
|
123
|
+
});
|
|
124
|
+
/** Unique identifier for this persona instance. */
|
|
125
|
+
get id(): string;
|
|
126
|
+
/** Unique identifier for this persona instance (alias for {@link id}). */
|
|
127
|
+
get personaId(): string;
|
|
128
|
+
/**
|
|
129
|
+
* Create a new persona on the molroo API and return a connected instance.
|
|
130
|
+
*
|
|
131
|
+
* @param config - API connection config and optional LLM adapter.
|
|
132
|
+
* Accepts a full {@link LLMAdapter} or a shorthand config object:
|
|
133
|
+
* ```typescript
|
|
134
|
+
* llm: { provider: 'openai', apiKey: '...' }
|
|
135
|
+
* ```
|
|
136
|
+
* @param personaConfig - Persona identity, personality, and goals.
|
|
137
|
+
* @returns A connected MolrooPersona instance.
|
|
138
|
+
*/
|
|
139
|
+
static create(config: {
|
|
140
|
+
baseUrl: string;
|
|
141
|
+
apiKey: string;
|
|
142
|
+
llm?: LLMInput;
|
|
143
|
+
engineLlm?: LLMInput;
|
|
144
|
+
memory?: MemoryAdapter | MemoryConfig;
|
|
145
|
+
recall?: RecallLimits;
|
|
146
|
+
events?: EventAdapter;
|
|
147
|
+
}, personaConfig: PersonaConfigData): Promise<MolrooPersona>;
|
|
148
|
+
/**
|
|
149
|
+
* Connect to an existing persona by ID.
|
|
150
|
+
*
|
|
151
|
+
* Verifies the persona exists and fetches its configuration.
|
|
152
|
+
*
|
|
153
|
+
* @param config - API connection config and optional LLM adapter.
|
|
154
|
+
* Accepts a full {@link LLMAdapter} or a shorthand config object:
|
|
155
|
+
* ```typescript
|
|
156
|
+
* llm: { provider: 'openai', apiKey: '...' }
|
|
157
|
+
* ```
|
|
158
|
+
* @param personaId - The ID of the persona to connect to.
|
|
159
|
+
* @returns A connected MolrooPersona instance.
|
|
160
|
+
*/
|
|
161
|
+
static connect(config: {
|
|
162
|
+
baseUrl: string;
|
|
163
|
+
apiKey: string;
|
|
164
|
+
llm?: LLMInput;
|
|
165
|
+
engineLlm?: LLMInput;
|
|
166
|
+
memory?: MemoryAdapter | MemoryConfig;
|
|
167
|
+
recall?: RecallLimits;
|
|
168
|
+
events?: EventAdapter;
|
|
169
|
+
}, personaId: string): Promise<MolrooPersona>;
|
|
170
|
+
/**
|
|
171
|
+
* List all personas for the authenticated tenant.
|
|
172
|
+
*
|
|
173
|
+
* @param config - API connection config (baseUrl + apiKey).
|
|
174
|
+
* @returns List of persona summaries with optional pagination cursor.
|
|
175
|
+
*/
|
|
176
|
+
static listPersonas(config: {
|
|
177
|
+
baseUrl: string;
|
|
178
|
+
apiKey: string;
|
|
179
|
+
}): Promise<{
|
|
180
|
+
personas: PersonaSummary[];
|
|
181
|
+
nextCursor?: string;
|
|
182
|
+
}>;
|
|
183
|
+
/**
|
|
184
|
+
* Send a message to the persona and get an emotion-processed response.
|
|
185
|
+
*
|
|
186
|
+
* Internally converts the SDK-friendly options into the API wire format
|
|
187
|
+
* (`{ event: PerceiveEvent, context?: PerceiveContext }`).
|
|
188
|
+
*/
|
|
189
|
+
perceive(message: string, options?: PerceiveOptions): Promise<AgentResponse>;
|
|
190
|
+
/**
|
|
191
|
+
* Fire a non-chat event and process through the emotion engine.
|
|
192
|
+
*
|
|
193
|
+
* Unlike chat(), this does not involve LLM generation — it directly
|
|
194
|
+
* sends an event to the perceive endpoint with a required appraisal vector.
|
|
195
|
+
* The resulting episode is saved to memory and can be recalled during chat().
|
|
196
|
+
*
|
|
197
|
+
* @param type - Event type identifier (e.g. 'attack', 'gift', 'rest').
|
|
198
|
+
* @param description - Human-readable event description (used as message context).
|
|
199
|
+
* @param options - Must include `appraisal`. Optionally `from`, `stimulus`, `payload`.
|
|
200
|
+
* @returns Emotion engine response.
|
|
201
|
+
*
|
|
202
|
+
* @example
|
|
203
|
+
* ```typescript
|
|
204
|
+
* await persona.event('attack', 'goblin attacks with sword', {
|
|
205
|
+
* from: 'goblin',
|
|
206
|
+
* appraisal: {
|
|
207
|
+
* goal_relevance: 0.8,
|
|
208
|
+
* goal_congruence: -0.9,
|
|
209
|
+
* expectedness: 0.3,
|
|
210
|
+
* controllability: 0.4,
|
|
211
|
+
* agency: -0.6,
|
|
212
|
+
* norm_compatibility: -0.5,
|
|
213
|
+
* },
|
|
214
|
+
* });
|
|
215
|
+
* ```
|
|
216
|
+
*/
|
|
217
|
+
event(type: string, description: string, options: Omit<PerceiveOptions, 'type'> & {
|
|
218
|
+
appraisal: AppraisalVector;
|
|
219
|
+
}): Promise<AgentResponse>;
|
|
220
|
+
/**
|
|
221
|
+
* High-level chat: getState → LLM generate → perceive with appraisal.
|
|
222
|
+
*
|
|
223
|
+
* 1. Calls `getPromptContext()` for the server-assembled system prompt
|
|
224
|
+
* 2. Recalls episodic + semantic memories from client-side stores
|
|
225
|
+
* 3. Sends to LLM adapter for text generation + appraisal
|
|
226
|
+
* 4. Sends the appraisal to the API via `perceive()` for emotion computation
|
|
227
|
+
* 5. Runs post-chat pipeline (episode save, reflection, events)
|
|
228
|
+
*
|
|
229
|
+
* Requires {@link LLMAdapter}. Without one, use {@link perceive} directly
|
|
230
|
+
* for emotion-only interaction.
|
|
231
|
+
*/
|
|
232
|
+
chat(message: string, options?: {
|
|
233
|
+
/** Source entity — a name string or structured {@link InterlocutorContext} with description/extensions injected into the system prompt. Default: `'user'`. */
|
|
234
|
+
from?: string | InterlocutorContext;
|
|
235
|
+
history?: Message[];
|
|
236
|
+
consumerSuffix?: string;
|
|
237
|
+
/** Optional callback invoked when the LLM requests a tool call during generation. */
|
|
238
|
+
onToolCall?: (call: {
|
|
239
|
+
name: string;
|
|
240
|
+
args: Record<string, unknown>;
|
|
241
|
+
result: unknown;
|
|
242
|
+
}) => void;
|
|
243
|
+
}): Promise<PersonaChatResult>;
|
|
244
|
+
/**
|
|
245
|
+
* Advance persona time by the specified number of seconds.
|
|
246
|
+
*
|
|
247
|
+
* @param seconds - Number of seconds to advance.
|
|
248
|
+
* @returns Any pending events that were processed.
|
|
249
|
+
*/
|
|
250
|
+
tick(seconds: number): Promise<{
|
|
251
|
+
pendingEvents?: unknown[];
|
|
252
|
+
}>;
|
|
253
|
+
/**
|
|
254
|
+
* Directly set the persona's emotion state in VAD space.
|
|
255
|
+
*
|
|
256
|
+
* @param vad - Partial VAD values to set (V: -1..1, A: 0..1, D: -1..1).
|
|
257
|
+
*/
|
|
258
|
+
setEmotion(vad: Partial<{
|
|
259
|
+
V: number;
|
|
260
|
+
A: number;
|
|
261
|
+
D: number;
|
|
262
|
+
}>): Promise<void>;
|
|
263
|
+
/**
|
|
264
|
+
* Get the current emotional and psychological state of the persona.
|
|
265
|
+
*
|
|
266
|
+
* @returns Current emotion, mood, somatic, and narrative state.
|
|
267
|
+
*/
|
|
268
|
+
getState(): Promise<PersonaState>;
|
|
269
|
+
/**
|
|
270
|
+
* Get a full snapshot of the persona's internal state.
|
|
271
|
+
*
|
|
272
|
+
* @returns Complete persona snapshot for backup/restore.
|
|
273
|
+
*/
|
|
274
|
+
getSnapshot(): Promise<PersonaSnapshot>;
|
|
275
|
+
/**
|
|
276
|
+
* Restore the persona's internal state from a snapshot.
|
|
277
|
+
*
|
|
278
|
+
* @param snapshot - The snapshot to restore.
|
|
279
|
+
*/
|
|
280
|
+
putSnapshot(snapshot: PersonaSnapshot): Promise<void>;
|
|
281
|
+
/**
|
|
282
|
+
* Patch the persona's configuration (identity, personality, goals).
|
|
283
|
+
*
|
|
284
|
+
* @param updates - Configuration updates to apply.
|
|
285
|
+
*/
|
|
286
|
+
patch(updates: {
|
|
287
|
+
config?: PersonaConfigData;
|
|
288
|
+
}): Promise<void>;
|
|
289
|
+
/** Soft-delete this persona. Can be restored with {@link restore}. */
|
|
290
|
+
destroy(): Promise<void>;
|
|
291
|
+
/** Restore a previously soft-deleted persona. */
|
|
292
|
+
restore(): Promise<void>;
|
|
293
|
+
/** Whether memory is available (either single adapter or split stores). */
|
|
294
|
+
private get hasMemory();
|
|
295
|
+
/**
|
|
296
|
+
* Lightweight pipeline for perceive()-only interactions (non-chat events).
|
|
297
|
+
* Saves the episode and emits events, but skips LLM reflection.
|
|
298
|
+
*/
|
|
299
|
+
private postPerceivePipeline;
|
|
300
|
+
private postChatPipeline;
|
|
301
|
+
private handleReflection;
|
|
302
|
+
private emitResponseEvents;
|
|
303
|
+
private buildAppraisalHint;
|
|
304
|
+
private requireLLM;
|
|
305
|
+
getPromptContext(consumerSuffix?: string, sourceEntity?: string): Promise<{
|
|
306
|
+
systemPrompt: string;
|
|
307
|
+
personaPrompt: Record<string, unknown>;
|
|
308
|
+
tools?: Array<Record<string, unknown>>;
|
|
309
|
+
}>;
|
|
310
|
+
/**
|
|
311
|
+
* Search persona's episodic memory via the API.
|
|
312
|
+
* Used internally by the tool-use loop.
|
|
313
|
+
*/
|
|
314
|
+
searchMemory(query: string, options?: {
|
|
315
|
+
topK?: number;
|
|
316
|
+
minImportance?: number;
|
|
317
|
+
}): Promise<Array<Record<string, unknown>>>;
|
|
318
|
+
/**
|
|
319
|
+
* LLM generation loop with tool-use support for standalone persona.
|
|
320
|
+
* Uses LLMResponseWithToolsSchema which allows the LLM to request
|
|
321
|
+
* memory searches via the search_memory field. Capped at 3 iterations.
|
|
322
|
+
*/
|
|
323
|
+
private generateWithToolLoop;
|
|
324
|
+
private buildContextBlock;
|
|
325
|
+
}
|
|
326
|
+
//# sourceMappingURL=persona.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"persona.d.ts","sourceRoot":"","sources":["../../src/persona.ts"],"names":[],"mappings":"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"}
|