@molroo-io/sdk 0.6.2 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (252) hide show
  1. package/README.md +100 -194
  2. package/dist/cjs/api-client.d.ts +2 -12
  3. package/dist/cjs/api-client.d.ts.map +1 -1
  4. package/dist/cjs/api-client.js +4 -42
  5. package/dist/cjs/errors.d.ts +1 -16
  6. package/dist/cjs/errors.d.ts.map +1 -1
  7. package/dist/cjs/errors.js +2 -18
  8. package/dist/cjs/events/types.d.ts +14 -21
  9. package/dist/cjs/events/types.d.ts.map +1 -1
  10. package/dist/cjs/events/types.js +0 -11
  11. package/dist/cjs/index.d.ts +26 -48
  12. package/dist/cjs/index.d.ts.map +1 -1
  13. package/dist/cjs/index.js +29 -52
  14. package/dist/cjs/llm/resolve.d.ts +4 -22
  15. package/dist/cjs/llm/resolve.d.ts.map +1 -1
  16. package/dist/cjs/llm/resolve.js +19 -7
  17. package/dist/cjs/llm/vercel-ai/adapter.d.ts +4 -10
  18. package/dist/cjs/llm/vercel-ai/adapter.d.ts.map +1 -1
  19. package/dist/cjs/llm/vercel-ai/adapter.js +6 -152
  20. package/dist/cjs/llm/vercel-ai/config.d.ts +8 -5
  21. package/dist/cjs/llm/vercel-ai/config.d.ts.map +1 -1
  22. package/dist/cjs/memory/in-memory.d.ts +14 -37
  23. package/dist/cjs/memory/in-memory.d.ts.map +1 -1
  24. package/dist/cjs/memory/in-memory.js +22 -85
  25. package/dist/cjs/memory/recall.d.ts +10 -21
  26. package/dist/cjs/memory/recall.d.ts.map +1 -1
  27. package/dist/cjs/memory/recall.js +12 -91
  28. package/dist/cjs/memory/types.d.ts +46 -186
  29. package/dist/cjs/memory/types.d.ts.map +1 -1
  30. package/dist/cjs/memory/types.js +0 -10
  31. package/dist/cjs/persona/chat-orchestrator.d.ts +46 -0
  32. package/dist/cjs/persona/chat-orchestrator.d.ts.map +1 -0
  33. package/dist/cjs/persona/chat-orchestrator.js +240 -0
  34. package/dist/cjs/persona/event-emitter.d.ts +7 -0
  35. package/dist/cjs/persona/event-emitter.d.ts.map +1 -0
  36. package/dist/cjs/persona/event-emitter.js +53 -0
  37. package/dist/cjs/persona/memory-pipeline.d.ts +26 -0
  38. package/dist/cjs/persona/memory-pipeline.d.ts.map +1 -0
  39. package/dist/cjs/persona/memory-pipeline.js +69 -0
  40. package/dist/cjs/persona.d.ts +56 -187
  41. package/dist/cjs/persona.d.ts.map +1 -1
  42. package/dist/cjs/persona.js +62 -638
  43. package/dist/cjs/shared/appraisal.d.ts +26 -0
  44. package/dist/cjs/shared/appraisal.d.ts.map +1 -0
  45. package/dist/cjs/shared/appraisal.js +45 -0
  46. package/dist/cjs/shared/client-factory.d.ts +23 -0
  47. package/dist/cjs/shared/client-factory.d.ts.map +1 -0
  48. package/dist/cjs/shared/client-factory.js +48 -0
  49. package/dist/cjs/shared/errors.d.ts +21 -0
  50. package/dist/cjs/shared/errors.d.ts.map +1 -0
  51. package/dist/cjs/shared/errors.js +29 -0
  52. package/dist/cjs/world/client.d.ts +2 -9
  53. package/dist/cjs/world/client.d.ts.map +1 -1
  54. package/dist/cjs/world/client.js +7 -34
  55. package/dist/cjs/world/errors.d.ts +1 -8
  56. package/dist/cjs/world/errors.d.ts.map +1 -1
  57. package/dist/cjs/world/errors.js +2 -12
  58. package/dist/cjs/world/index.d.ts +2 -2
  59. package/dist/cjs/world/index.d.ts.map +1 -1
  60. package/dist/cjs/world/types.d.ts +6 -4
  61. package/dist/cjs/world/types.d.ts.map +1 -1
  62. package/dist/cjs/world/world-domain.d.ts.map +1 -1
  63. package/dist/cjs/world/world-domain.js +4 -32
  64. package/dist/cjs/world/world-persona.d.ts +7 -5
  65. package/dist/cjs/world/world-persona.d.ts.map +1 -1
  66. package/dist/cjs/world/world-persona.js +2 -17
  67. package/dist/cjs/world/world.d.ts +28 -5
  68. package/dist/cjs/world/world.d.ts.map +1 -1
  69. package/dist/cjs/world/world.js +13 -11
  70. package/dist/esm/api-client.d.ts +2 -12
  71. package/dist/esm/api-client.d.ts.map +1 -1
  72. package/dist/esm/api-client.js +3 -38
  73. package/dist/esm/errors.d.ts +1 -16
  74. package/dist/esm/errors.d.ts.map +1 -1
  75. package/dist/esm/errors.js +1 -17
  76. package/dist/esm/events/types.d.ts +14 -21
  77. package/dist/esm/events/types.d.ts.map +1 -1
  78. package/dist/esm/events/types.js +0 -11
  79. package/dist/esm/index.d.ts +26 -48
  80. package/dist/esm/index.d.ts.map +1 -1
  81. package/dist/esm/index.js +25 -38
  82. package/dist/esm/llm/resolve.d.ts +4 -22
  83. package/dist/esm/llm/resolve.d.ts.map +1 -1
  84. package/dist/esm/llm/resolve.js +20 -8
  85. package/dist/esm/llm/vercel-ai/adapter.d.ts +4 -10
  86. package/dist/esm/llm/vercel-ai/adapter.d.ts.map +1 -1
  87. package/dist/esm/llm/vercel-ai/adapter.js +6 -119
  88. package/dist/esm/llm/vercel-ai/config.d.ts +8 -5
  89. package/dist/esm/llm/vercel-ai/config.d.ts.map +1 -1
  90. package/dist/esm/memory/in-memory.d.ts +14 -37
  91. package/dist/esm/memory/in-memory.d.ts.map +1 -1
  92. package/dist/esm/memory/in-memory.js +20 -83
  93. package/dist/esm/memory/recall.d.ts +10 -21
  94. package/dist/esm/memory/recall.d.ts.map +1 -1
  95. package/dist/esm/memory/recall.js +12 -91
  96. package/dist/esm/memory/types.d.ts +46 -186
  97. package/dist/esm/memory/types.d.ts.map +1 -1
  98. package/dist/esm/memory/types.js +1 -9
  99. package/dist/esm/persona/chat-orchestrator.d.ts +46 -0
  100. package/dist/esm/persona/chat-orchestrator.d.ts.map +1 -0
  101. package/dist/esm/persona/chat-orchestrator.js +204 -0
  102. package/dist/esm/persona/event-emitter.d.ts +7 -0
  103. package/dist/esm/persona/event-emitter.d.ts.map +1 -0
  104. package/dist/esm/persona/event-emitter.js +50 -0
  105. package/dist/esm/persona/memory-pipeline.d.ts +26 -0
  106. package/dist/esm/persona/memory-pipeline.d.ts.map +1 -0
  107. package/dist/esm/persona/memory-pipeline.js +65 -0
  108. package/dist/esm/persona.d.ts +56 -187
  109. package/dist/esm/persona.d.ts.map +1 -1
  110. package/dist/esm/persona.js +62 -638
  111. package/dist/esm/shared/appraisal.d.ts +26 -0
  112. package/dist/esm/shared/appraisal.d.ts.map +1 -0
  113. package/dist/esm/shared/appraisal.js +40 -0
  114. package/dist/esm/shared/client-factory.d.ts +23 -0
  115. package/dist/esm/shared/client-factory.d.ts.map +1 -0
  116. package/dist/esm/shared/client-factory.js +41 -0
  117. package/dist/esm/shared/errors.d.ts +21 -0
  118. package/dist/esm/shared/errors.d.ts.map +1 -0
  119. package/dist/esm/shared/errors.js +24 -0
  120. package/dist/esm/world/client.d.ts +2 -9
  121. package/dist/esm/world/client.d.ts.map +1 -1
  122. package/dist/esm/world/client.js +6 -30
  123. package/dist/esm/world/errors.d.ts +1 -8
  124. package/dist/esm/world/errors.d.ts.map +1 -1
  125. package/dist/esm/world/errors.js +1 -11
  126. package/dist/esm/world/index.d.ts +2 -2
  127. package/dist/esm/world/index.d.ts.map +1 -1
  128. package/dist/esm/world/types.d.ts +6 -4
  129. package/dist/esm/world/types.d.ts.map +1 -1
  130. package/dist/esm/world/world-domain.d.ts.map +1 -1
  131. package/dist/esm/world/world-domain.js +4 -32
  132. package/dist/esm/world/world-persona.d.ts +7 -5
  133. package/dist/esm/world/world-persona.d.ts.map +1 -1
  134. package/dist/esm/world/world-persona.js +2 -17
  135. package/dist/esm/world/world.d.ts +28 -5
  136. package/dist/esm/world/world.d.ts.map +1 -1
  137. package/dist/esm/world/world.js +13 -11
  138. package/package.json +4 -101
  139. package/dist/cjs/embedding/cloudflare.d.ts +0 -15
  140. package/dist/cjs/embedding/cloudflare.d.ts.map +0 -1
  141. package/dist/cjs/embedding/cloudflare.js +0 -16
  142. package/dist/cjs/embedding/cohere.d.ts +0 -8
  143. package/dist/cjs/embedding/cohere.d.ts.map +0 -1
  144. package/dist/cjs/embedding/cohere.js +0 -31
  145. package/dist/cjs/embedding/index.d.ts +0 -9
  146. package/dist/cjs/embedding/index.d.ts.map +0 -1
  147. package/dist/cjs/embedding/index.js +0 -11
  148. package/dist/cjs/embedding/local.d.ts +0 -6
  149. package/dist/cjs/embedding/local.d.ts.map +0 -1
  150. package/dist/cjs/embedding/local.js +0 -28
  151. package/dist/cjs/embedding/openai.d.ts +0 -9
  152. package/dist/cjs/embedding/openai.d.ts.map +0 -1
  153. package/dist/cjs/embedding/openai.js +0 -26
  154. package/dist/cjs/events/console.d.ts +0 -25
  155. package/dist/cjs/events/console.d.ts.map +0 -1
  156. package/dist/cjs/events/console.js +0 -41
  157. package/dist/cjs/events/webhook.d.ts +0 -30
  158. package/dist/cjs/events/webhook.d.ts.map +0 -1
  159. package/dist/cjs/events/webhook.js +0 -79
  160. package/dist/cjs/memory/cloudflare/index.d.ts +0 -3
  161. package/dist/cjs/memory/cloudflare/index.d.ts.map +0 -1
  162. package/dist/cjs/memory/cloudflare/index.js +0 -5
  163. package/dist/cjs/memory/cloudflare/vectorize.d.ts +0 -62
  164. package/dist/cjs/memory/cloudflare/vectorize.d.ts.map +0 -1
  165. package/dist/cjs/memory/cloudflare/vectorize.js +0 -55
  166. package/dist/cjs/memory/in-memory-semantic.d.ts +0 -16
  167. package/dist/cjs/memory/in-memory-semantic.d.ts.map +0 -1
  168. package/dist/cjs/memory/in-memory-semantic.js +0 -57
  169. package/dist/cjs/memory/pinecone/index.d.ts +0 -7
  170. package/dist/cjs/memory/pinecone/index.d.ts.map +0 -1
  171. package/dist/cjs/memory/pinecone/index.js +0 -8
  172. package/dist/cjs/memory/pinecone/memory-adapter.d.ts +0 -62
  173. package/dist/cjs/memory/pinecone/memory-adapter.d.ts.map +0 -1
  174. package/dist/cjs/memory/pinecone/memory-adapter.js +0 -220
  175. package/dist/cjs/memory/pinecone/semantic.d.ts +0 -44
  176. package/dist/cjs/memory/pinecone/semantic.d.ts.map +0 -1
  177. package/dist/cjs/memory/pinecone/semantic.js +0 -90
  178. package/dist/cjs/memory/sqlite/index.d.ts +0 -3
  179. package/dist/cjs/memory/sqlite/index.d.ts.map +0 -1
  180. package/dist/cjs/memory/sqlite/index.js +0 -5
  181. package/dist/cjs/memory/sqlite/memory-adapter.d.ts +0 -58
  182. package/dist/cjs/memory/sqlite/memory-adapter.d.ts.map +0 -1
  183. package/dist/cjs/memory/sqlite/memory-adapter.js +0 -336
  184. package/dist/cjs/memory/sqlite/schema.d.ts +0 -4
  185. package/dist/cjs/memory/sqlite/schema.d.ts.map +0 -1
  186. package/dist/cjs/memory/sqlite/schema.js +0 -91
  187. package/dist/cjs/memory/supabase/index.d.ts +0 -7
  188. package/dist/cjs/memory/supabase/index.d.ts.map +0 -1
  189. package/dist/cjs/memory/supabase/index.js +0 -8
  190. package/dist/cjs/memory/supabase/memory-adapter.d.ts +0 -67
  191. package/dist/cjs/memory/supabase/memory-adapter.d.ts.map +0 -1
  192. package/dist/cjs/memory/supabase/memory-adapter.js +0 -335
  193. package/dist/cjs/memory/supabase/semantic.d.ts +0 -44
  194. package/dist/cjs/memory/supabase/semantic.d.ts.map +0 -1
  195. package/dist/cjs/memory/supabase/semantic.js +0 -72
  196. package/dist/esm/embedding/cloudflare.d.ts +0 -15
  197. package/dist/esm/embedding/cloudflare.d.ts.map +0 -1
  198. package/dist/esm/embedding/cloudflare.js +0 -13
  199. package/dist/esm/embedding/cohere.d.ts +0 -8
  200. package/dist/esm/embedding/cohere.d.ts.map +0 -1
  201. package/dist/esm/embedding/cohere.js +0 -28
  202. package/dist/esm/embedding/index.d.ts +0 -9
  203. package/dist/esm/embedding/index.d.ts.map +0 -1
  204. package/dist/esm/embedding/index.js +0 -4
  205. package/dist/esm/embedding/local.d.ts +0 -6
  206. package/dist/esm/embedding/local.d.ts.map +0 -1
  207. package/dist/esm/embedding/local.js +0 -25
  208. package/dist/esm/embedding/openai.d.ts +0 -9
  209. package/dist/esm/embedding/openai.d.ts.map +0 -1
  210. package/dist/esm/embedding/openai.js +0 -23
  211. package/dist/esm/events/console.d.ts +0 -25
  212. package/dist/esm/events/console.d.ts.map +0 -1
  213. package/dist/esm/events/console.js +0 -37
  214. package/dist/esm/events/webhook.d.ts +0 -30
  215. package/dist/esm/events/webhook.d.ts.map +0 -1
  216. package/dist/esm/events/webhook.js +0 -75
  217. package/dist/esm/memory/cloudflare/index.d.ts +0 -3
  218. package/dist/esm/memory/cloudflare/index.d.ts.map +0 -1
  219. package/dist/esm/memory/cloudflare/index.js +0 -1
  220. package/dist/esm/memory/cloudflare/vectorize.d.ts +0 -62
  221. package/dist/esm/memory/cloudflare/vectorize.d.ts.map +0 -1
  222. package/dist/esm/memory/cloudflare/vectorize.js +0 -51
  223. package/dist/esm/memory/in-memory-semantic.d.ts +0 -16
  224. package/dist/esm/memory/in-memory-semantic.d.ts.map +0 -1
  225. package/dist/esm/memory/in-memory-semantic.js +0 -53
  226. package/dist/esm/memory/pinecone/index.d.ts +0 -7
  227. package/dist/esm/memory/pinecone/index.d.ts.map +0 -1
  228. package/dist/esm/memory/pinecone/index.js +0 -3
  229. package/dist/esm/memory/pinecone/memory-adapter.d.ts +0 -62
  230. package/dist/esm/memory/pinecone/memory-adapter.d.ts.map +0 -1
  231. package/dist/esm/memory/pinecone/memory-adapter.js +0 -216
  232. package/dist/esm/memory/pinecone/semantic.d.ts +0 -44
  233. package/dist/esm/memory/pinecone/semantic.d.ts.map +0 -1
  234. package/dist/esm/memory/pinecone/semantic.js +0 -86
  235. package/dist/esm/memory/sqlite/index.d.ts +0 -3
  236. package/dist/esm/memory/sqlite/index.d.ts.map +0 -1
  237. package/dist/esm/memory/sqlite/index.js +0 -1
  238. package/dist/esm/memory/sqlite/memory-adapter.d.ts +0 -58
  239. package/dist/esm/memory/sqlite/memory-adapter.d.ts.map +0 -1
  240. package/dist/esm/memory/sqlite/memory-adapter.js +0 -296
  241. package/dist/esm/memory/sqlite/schema.d.ts +0 -4
  242. package/dist/esm/memory/sqlite/schema.d.ts.map +0 -1
  243. package/dist/esm/memory/sqlite/schema.js +0 -86
  244. package/dist/esm/memory/supabase/index.d.ts +0 -7
  245. package/dist/esm/memory/supabase/index.d.ts.map +0 -1
  246. package/dist/esm/memory/supabase/index.js +0 -3
  247. package/dist/esm/memory/supabase/memory-adapter.d.ts +0 -67
  248. package/dist/esm/memory/supabase/memory-adapter.d.ts.map +0 -1
  249. package/dist/esm/memory/supabase/memory-adapter.js +0 -331
  250. package/dist/esm/memory/supabase/semantic.d.ts +0 -44
  251. package/dist/esm/memory/supabase/semantic.d.ts.map +0 -1
  252. package/dist/esm/memory/supabase/semantic.js +0 -68
package/dist/cjs/index.js CHANGED
@@ -2,69 +2,46 @@
2
2
  /**
3
3
  * @molroo-io/sdk - Thin Client SDK for molroo emotion engine
4
4
  *
5
- * ## Boundary — this is where LLM orchestration lives:
6
- * - **LLM calls happen HERE** — consumer's API key, consumer's model.
7
- * - **Appraisal generation happens HERE** — LLM produces appraisal, SDK sends to API.
8
- * - **Memory recall happens HERE** — episodic/semantic/reflections from client stores.
9
- * - **Prompt composition**: API returns persona fragment → SDK adds memory context.
5
+ * ## Quick Start
10
6
  *
11
- * The API/engine never call LLM. This SDK is the bridge.
12
- *
13
- * @example
14
7
  * ```typescript
15
- * import { MolrooPersona } from '@molroo-io/sdk';
16
- * import { createVercelAIAdapter } from '@molroo-io/sdk';
8
+ * import { Molroo } from '@molroo-io/sdk';
9
+ * import { createOpenAI } from '@ai-sdk/openai';
10
+ *
11
+ * const molroo = new Molroo({ apiKey: 'mk_live_...' });
12
+ *
13
+ * const openai = createOpenAI({ apiKey: process.env.OPENAI_API_KEY! });
17
14
  *
18
- * const llm = createVercelAIAdapter({
19
- * provider: 'openai',
20
- * apiKey: process.env.OPENAI_API_KEY!,
21
- * });
15
+ * // Create persona from description
16
+ * const sera = await molroo.createPersona(
17
+ * 'A kind and curious barista named Sera',
18
+ * { llm: openai }
19
+ * );
22
20
  *
23
- * const persona = await MolrooPersona.create({
24
- * baseUrl: 'https://api.molroo.io',
25
- * apiKey: 'your_api_key',
26
- * llm,
27
- * }, {
28
- * config: { identity: { name: 'Sera' }, personality: { O: 0.7, C: 0.6, E: 0.8, A: 0.5, N: 0.3, H: 0.6 } },
29
- * });
21
+ * const result = await sera.chat('Hello!');
22
+ * ```
23
+ *
24
+ * ## Advanced: World Simulation
30
25
  *
31
- * const result = await persona.chat('Hello!');
26
+ * ```typescript
27
+ * const world = await molroo.createWorld({ name: 'Cafe' });
28
+ * const sera = await molroo.createPersona('Barista Sera', { llm: openai });
29
+ * await world.addPersona({ personaConfigId: sera.id, config: {...} });
32
30
  * ```
33
31
  */
34
32
  Object.defineProperty(exports, "__esModule", { value: true });
35
- exports.withDefaults = exports.DEFAULT_PERSONA = exports.LLMResponseWithToolsSchema = exports.LLMResponseSchema = exports.AppraisalVectorSchema = exports.GeneratePersonaSchema = exports.generatePersona = exports.WebhookEventAdapter = exports.ConsoleEventAdapter = exports.InMemoryEpisodeStore = exports.InMemorySemanticMemory = exports.InMemoryEpisodeAdapter = exports.isMemoryConfig = exports.createVercelAIAdapter = exports.VercelAIAdapter = exports.MolrooApiError = exports.MolrooPersona = exports.Molroo = void 0;
33
+ exports.withDefaults = exports.DEFAULT_PERSONA = exports.fromWireAppraisal = exports.toWireAppraisal = exports.NEUTRAL_APPRAISAL = exports.WorldApiError = exports.MolrooApiError = exports.Molroo = void 0;
36
34
  // ── Main exports ──
37
35
  var world_1 = require("./world/world");
38
36
  Object.defineProperty(exports, "Molroo", { enumerable: true, get: function () { return world_1.Molroo; } });
39
- var persona_1 = require("./persona");
40
- Object.defineProperty(exports, "MolrooPersona", { enumerable: true, get: function () { return persona_1.MolrooPersona; } });
41
- var types_1 = require("./types");
42
- Object.defineProperty(exports, "MolrooApiError", { enumerable: true, get: function () { return types_1.MolrooApiError; } });
43
- var vercel_ai_1 = require("./llm/vercel-ai");
44
- Object.defineProperty(exports, "VercelAIAdapter", { enumerable: true, get: function () { return vercel_ai_1.VercelAIAdapter; } });
45
- Object.defineProperty(exports, "createVercelAIAdapter", { enumerable: true, get: function () { return vercel_ai_1.createVercelAIAdapter; } });
46
- var types_2 = require("./memory/types");
47
- Object.defineProperty(exports, "isMemoryConfig", { enumerable: true, get: function () { return types_2.isMemoryConfig; } });
48
- var in_memory_1 = require("./memory/in-memory");
49
- Object.defineProperty(exports, "InMemoryEpisodeAdapter", { enumerable: true, get: function () { return in_memory_1.InMemoryEpisodeAdapter; } });
50
- var in_memory_semantic_1 = require("./memory/in-memory-semantic");
51
- Object.defineProperty(exports, "InMemorySemanticMemory", { enumerable: true, get: function () { return in_memory_semantic_1.InMemorySemanticMemory; } });
52
- var in_memory_2 = require("./memory/in-memory");
53
- Object.defineProperty(exports, "InMemoryEpisodeStore", { enumerable: true, get: function () { return in_memory_2.InMemoryEpisodeStore; } });
54
- var console_1 = require("./events/console");
55
- Object.defineProperty(exports, "ConsoleEventAdapter", { enumerable: true, get: function () { return console_1.ConsoleEventAdapter; } });
56
- var webhook_1 = require("./events/webhook");
57
- Object.defineProperty(exports, "WebhookEventAdapter", { enumerable: true, get: function () { return webhook_1.WebhookEventAdapter; } });
58
- // ── Generate ──
59
- var persona_2 = require("./generate/persona");
60
- Object.defineProperty(exports, "generatePersona", { enumerable: true, get: function () { return persona_2.generatePersona; } });
61
- var schema_1 = require("./generate/schema");
62
- Object.defineProperty(exports, "GeneratePersonaSchema", { enumerable: true, get: function () { return schema_1.GeneratePersonaSchema; } });
63
- // ── LLM types & schemas ──
64
- var schema_2 = require("./llm/schema");
65
- Object.defineProperty(exports, "AppraisalVectorSchema", { enumerable: true, get: function () { return schema_2.AppraisalVectorSchema; } });
66
- Object.defineProperty(exports, "LLMResponseSchema", { enumerable: true, get: function () { return schema_2.LLMResponseSchema; } });
67
- Object.defineProperty(exports, "LLMResponseWithToolsSchema", { enumerable: true, get: function () { return schema_2.LLMResponseWithToolsSchema; } });
37
+ var errors_1 = require("./shared/errors");
38
+ Object.defineProperty(exports, "MolrooApiError", { enumerable: true, get: function () { return errors_1.MolrooApiError; } });
39
+ Object.defineProperty(exports, "WorldApiError", { enumerable: true, get: function () { return errors_1.WorldApiError; } });
40
+ // ── Shared utilities ──
41
+ var appraisal_1 = require("./shared/appraisal");
42
+ Object.defineProperty(exports, "NEUTRAL_APPRAISAL", { enumerable: true, get: function () { return appraisal_1.NEUTRAL_APPRAISAL; } });
43
+ Object.defineProperty(exports, "toWireAppraisal", { enumerable: true, get: function () { return appraisal_1.toWireAppraisal; } });
44
+ Object.defineProperty(exports, "fromWireAppraisal", { enumerable: true, get: function () { return appraisal_1.fromWireAppraisal; } });
68
45
  // ── Defaults ──
69
46
  var defaults_1 = require("./defaults");
70
47
  Object.defineProperty(exports, "DEFAULT_PERSONA", { enumerable: true, get: function () { return defaults_1.DEFAULT_PERSONA; } });
@@ -1,28 +1,10 @@
1
1
  import type { LLMAdapter } from './adapter';
2
- /**
3
- * Shorthand config for creating an LLM adapter without importing a separate package.
4
- *
5
- * @example
6
- * ```typescript
7
- * const persona = await MolrooPersona.create({
8
- * baseUrl, apiKey,
9
- * llm: { provider: 'openai', apiKey: '...' },
10
- * }, config);
11
- * ```
12
- */
13
- export interface LLMShorthand {
14
- provider: 'openai' | 'anthropic' | 'vertex' | 'openrouter';
15
- apiKey: string;
16
- model?: string;
17
- baseUrl?: string;
18
- projectId?: string;
19
- location?: string;
20
- }
21
- /** LLM adapter or shorthand config. */
22
- export type LLMInput = LLMAdapter | LLMShorthand;
2
+ import type { LanguageModel } from 'ai';
3
+ /** LLM adapter or Vercel AI SDK provider instance. */
4
+ export type LLMInput = LLMAdapter | LanguageModel;
23
5
  /**
24
6
  * Resolve an LLMInput to an LLMAdapter.
25
- * If a shorthand config is given, creates a VercelAIAdapter directly.
7
+ * If a Vercel AI SDK provider is given, wraps it in VercelAIAdapter.
26
8
  */
27
9
  export declare function resolveLLM(input: LLMInput): Promise<LLMAdapter>;
28
10
  //# sourceMappingURL=resolve.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../../../src/llm/resolve.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAG5C;;;;;;;;;;GAUG;AACH,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,QAAQ,GAAG,WAAW,GAAG,QAAQ,GAAG,YAAY,CAAC;IAC3D,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,uCAAuC;AACvC,MAAM,MAAM,QAAQ,GAAG,UAAU,GAAG,YAAY,CAAC;AAYjD;;;GAGG;AACH,wBAAsB,UAAU,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,CAGrE"}
1
+ {"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../../../src/llm/resolve.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAE5C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AAExC,sDAAsD;AACtD,MAAM,MAAM,QAAQ,GAAG,UAAU,GAAG,aAAa,CAAC;AAelD;;;GAGG;AACH,wBAAsB,UAAU,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,CAmBrE"}
@@ -2,19 +2,31 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.resolveLLM = resolveLLM;
4
4
  const vercel_ai_1 = require("./vercel-ai");
5
- function isShorthand(input) {
5
+ /**
6
+ * Check if input is a Vercel AI SDK provider instance.
7
+ * Provider instances have a `doGenerate` method.
8
+ */
9
+ function isVercelProvider(input) {
6
10
  return (input != null &&
7
11
  typeof input === 'object' &&
8
- 'provider' in input &&
9
- 'apiKey' in input &&
10
- !('generateText' in input));
12
+ 'doGenerate' in input &&
13
+ typeof input.doGenerate === 'function');
11
14
  }
12
15
  /**
13
16
  * Resolve an LLMInput to an LLMAdapter.
14
- * If a shorthand config is given, creates a VercelAIAdapter directly.
17
+ * If a Vercel AI SDK provider is given, wraps it in VercelAIAdapter.
15
18
  */
16
19
  async function resolveLLM(input) {
17
- if (!isShorthand(input))
20
+ // Check if it's an adapter first
21
+ if (input != null &&
22
+ typeof input === 'object' &&
23
+ 'generateText' in input &&
24
+ 'generateObject' in input) {
18
25
  return input;
19
- return (0, vercel_ai_1.createVercelAIAdapter)(input);
26
+ }
27
+ // Vercel AI SDK provider instance - wrap it
28
+ if (isVercelProvider(input)) {
29
+ return new vercel_ai_1.VercelAIAdapter({ provider: input });
30
+ }
31
+ throw new Error('Invalid LLM input. Expected LLMAdapter or Vercel AI SDK provider instance.');
20
32
  }
@@ -2,28 +2,22 @@ import type { LLMAdapter, GenerateTextOptions, GenerateObjectOptions } from '../
2
2
  import type { VercelAIConfig } from './config';
3
3
  /**
4
4
  * Vercel AI SDK adapter for molroo.
5
- * Supports OpenAI, Anthropic, Vertex AI, and OpenRouter providers.
5
+ * Wraps a pre-configured Vercel AI SDK provider instance.
6
6
  */
7
7
  export declare class VercelAIAdapter implements LLMAdapter {
8
- private config;
8
+ private provider;
9
+ private model?;
9
10
  constructor(config: VercelAIConfig);
10
- private getProvider;
11
- /**
12
- * Create a language model instance.
13
- * For OpenAI-compatible APIs with custom baseUrl, uses .chat() to force
14
- * Chat Completions API instead of the default Responses API.
15
- */
16
- private getModel;
17
11
  generateText(options: GenerateTextOptions): Promise<{
18
12
  text: string;
19
13
  }>;
20
14
  generateObject<T>(options: GenerateObjectOptions<T>): Promise<{
21
15
  object: T;
22
16
  }>;
23
- private getDefaultModel;
24
17
  }
25
18
  /**
26
19
  * Factory function to create a VercelAIAdapter instance.
20
+ * @deprecated Create adapter directly: `new VercelAIAdapter({ provider })`
27
21
  */
28
22
  export declare function createVercelAIAdapter(config: VercelAIConfig): VercelAIAdapter;
29
23
  //# sourceMappingURL=adapter.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../../../src/llm/vercel-ai/adapter.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AACzF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAgG/C;;;GAGG;AACH,qBAAa,eAAgB,YAAW,UAAU;IAChD,OAAO,CAAC,MAAM,CAAiB;gBAEnB,MAAM,EAAE,cAAc;YAIpB,WAAW;IAoCzB;;;;OAIG;YACW,QAAQ;IAQhB,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAerE,cAAc,CAAC,CAAC,EAAE,OAAO,EAAE,qBAAqB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,CAAC,CAAA;KAAE,CAAC;IA2BlF,OAAO,CAAC,eAAe;CASxB;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,cAAc,GAAG,eAAe,CAE7E"}
1
+ {"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../../../src/llm/vercel-ai/adapter.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AACzF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAiD/C;;;GAGG;AACH,qBAAa,eAAgB,YAAW,UAAU;IAChD,OAAO,CAAC,QAAQ,CAA6B;IAC7C,OAAO,CAAC,KAAK,CAAC,CAAS;gBAEX,MAAM,EAAE,cAAc;IAK5B,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAYrE,cAAc,CAAC,CAAC,EAAE,OAAO,EAAE,qBAAqB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,CAAC,CAAA;KAAE,CAAC;CAiBnF;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,cAAc,GAAG,eAAe,CAE7E"}
@@ -1,37 +1,4 @@
1
1
  "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
2
  Object.defineProperty(exports, "__esModule", { value: true });
36
3
  exports.VercelAIAdapter = void 0;
37
4
  exports.createVercelAIAdapter = createVercelAIAdapter;
@@ -76,116 +43,18 @@ function strictifySchema(schema) {
76
43
  function isZodSchema(schema) {
77
44
  return schema && typeof schema === 'object' && '_def' in schema;
78
45
  }
79
- /**
80
- * Recursively strip `$schema` keys from any object.
81
- * AI SDK's Zod->JSON Schema converter adds `$schema` which some
82
- * OpenAI-compatible APIs (e.g. Kimi/Moonshot) reject.
83
- */
84
- function stripDollarSchema(obj) {
85
- if (!obj || typeof obj !== 'object')
86
- return obj;
87
- if (Array.isArray(obj))
88
- return obj.map(stripDollarSchema);
89
- const result = {};
90
- for (const [k, v] of Object.entries(obj)) {
91
- if (k === '$schema')
92
- continue;
93
- result[k] = stripDollarSchema(v);
94
- }
95
- return result;
96
- }
97
- /**
98
- * Create a fetch wrapper that strips `$schema` from JSON request bodies.
99
- * Used for OpenAI-compatible APIs that reject non-standard schema keywords.
100
- */
101
- function createSchemaStrippingFetch() {
102
- return async (input, init) => {
103
- if (init?.body && typeof init.body === 'string') {
104
- try {
105
- const parsed = JSON.parse(init.body);
106
- if (parsed.response_format?.json_schema?.schema) {
107
- parsed.response_format.json_schema.schema =
108
- stripDollarSchema(parsed.response_format.json_schema.schema);
109
- init = { ...init, body: JSON.stringify(parsed) };
110
- }
111
- }
112
- catch {
113
- // Not JSON, pass through
114
- }
115
- }
116
- const response = await globalThis.fetch(input, init);
117
- // Debug: log error responses from provider
118
- if (!response.ok && process.env.DEBUG_LLM) {
119
- const cloned = response.clone();
120
- try {
121
- const body = await cloned.text();
122
- console.error(`[adapter-llm] ${response.status} ${response.statusText}: ${body.slice(0, 500)}`);
123
- }
124
- catch { /* ignore */ }
125
- }
126
- return response;
127
- };
128
- }
129
46
  /**
130
47
  * Vercel AI SDK adapter for molroo.
131
- * Supports OpenAI, Anthropic, Vertex AI, and OpenRouter providers.
48
+ * Wraps a pre-configured Vercel AI SDK provider instance.
132
49
  */
133
50
  class VercelAIAdapter {
134
51
  constructor(config) {
135
- this.config = config;
136
- }
137
- async getProvider() {
138
- switch (this.config.provider) {
139
- case 'openai': {
140
- const { createOpenAI } = await Promise.resolve().then(() => __importStar(require('@ai-sdk/openai')));
141
- return createOpenAI({
142
- apiKey: this.config.apiKey,
143
- ...(this.config.baseUrl ? {
144
- baseURL: this.config.baseUrl,
145
- fetch: createSchemaStrippingFetch(),
146
- } : {}),
147
- });
148
- }
149
- case 'anthropic': {
150
- const { createAnthropic } = await Promise.resolve().then(() => __importStar(require('@ai-sdk/anthropic')));
151
- return createAnthropic({ apiKey: this.config.apiKey });
152
- }
153
- case 'openrouter': {
154
- const { createOpenAI } = await Promise.resolve().then(() => __importStar(require('@ai-sdk/openai')));
155
- return createOpenAI({
156
- apiKey: this.config.apiKey,
157
- baseURL: 'https://openrouter.ai/api/v1',
158
- fetch: createSchemaStrippingFetch(),
159
- });
160
- }
161
- case 'vertex': {
162
- const { createVertex } = await Promise.resolve().then(() => __importStar(require('@ai-sdk/google-vertex')));
163
- return createVertex({
164
- project: this.config.projectId,
165
- location: this.config.location || 'us-central1'
166
- });
167
- }
168
- default:
169
- throw new Error(`Unknown provider: ${this.config.provider}`);
170
- }
171
- }
172
- /**
173
- * Create a language model instance.
174
- * For OpenAI-compatible APIs with custom baseUrl, uses .chat() to force
175
- * Chat Completions API instead of the default Responses API.
176
- */
177
- async getModel(modelName) {
178
- const provider = await this.getProvider();
179
- if (this.config.provider === 'openrouter' || (this.config.provider === 'openai' && this.config.baseUrl)) {
180
- return provider.chat(modelName);
181
- }
182
- return provider(modelName);
52
+ this.provider = config.provider;
53
+ this.model = config.model;
183
54
  }
184
55
  async generateText(options) {
185
- const modelName = this.config.model || this.getDefaultModel();
186
- const model = await this.getModel(modelName);
187
56
  const result = await (0, ai_1.generateText)({
188
- model,
57
+ model: this.provider,
189
58
  system: options.system,
190
59
  messages: options.messages,
191
60
  ...(options.temperature !== undefined && { temperature: options.temperature }),
@@ -194,40 +63,25 @@ class VercelAIAdapter {
194
63
  return { text: result.text };
195
64
  }
196
65
  async generateObject(options) {
197
- const modelName = this.config.model || this.getDefaultModel();
198
- const model = await this.getModel(modelName);
199
66
  // Zod schemas can be passed directly to AI SDK.
200
67
  // Plain JSON schemas need strictification for OpenAI compatibility.
201
68
  const resolvedSchema = isZodSchema(options.schema)
202
69
  ? options.schema
203
70
  : (0, ai_1.jsonSchema)(strictifySchema(options.schema));
204
- // OpenRouter and custom baseUrl providers often don't support strict
205
- // json_schema mode. Use tool calling mode which is more widely supported.
206
- const isProxied = this.config.provider === 'openrouter' ||
207
- (this.config.provider === 'openai' && !!this.config.baseUrl);
208
71
  const result = await (0, ai_1.generateObject)({
209
- model,
72
+ model: this.provider,
210
73
  schema: resolvedSchema,
211
74
  system: options.system,
212
75
  messages: options.messages,
213
- ...(isProxied && { mode: 'tool' }),
214
76
  ...(options.temperature !== undefined && { temperature: options.temperature }),
215
77
  });
216
78
  return { object: result.object };
217
79
  }
218
- getDefaultModel() {
219
- switch (this.config.provider) {
220
- case 'openai': return 'gpt-4o';
221
- case 'anthropic': return 'claude-sonnet-4-5-20250929';
222
- case 'openrouter': return 'anthropic/claude-sonnet-4-5';
223
- case 'vertex': return 'gemini-2.0-flash';
224
- default: return 'gpt-4o';
225
- }
226
- }
227
80
  }
228
81
  exports.VercelAIAdapter = VercelAIAdapter;
229
82
  /**
230
83
  * Factory function to create a VercelAIAdapter instance.
84
+ * @deprecated Create adapter directly: `new VercelAIAdapter({ provider })`
231
85
  */
232
86
  function createVercelAIAdapter(config) {
233
87
  return new VercelAIAdapter(config);
@@ -1,9 +1,12 @@
1
+ import type { LanguageModel } from 'ai';
2
+ /**
3
+ * Configuration for VercelAIAdapter.
4
+ * Accepts a pre-configured Vercel AI SDK provider instance.
5
+ */
1
6
  export interface VercelAIConfig {
2
- provider: 'openai' | 'anthropic' | 'vertex' | 'openrouter';
3
- apiKey: string;
7
+ /** Pre-configured Vercel AI SDK provider instance (e.g., from createOpenAI()) */
8
+ provider: LanguageModel;
9
+ /** Default model name. If not provided, uses provider's default */
4
10
  model?: string;
5
- baseUrl?: string;
6
- projectId?: string;
7
- location?: string;
8
11
  }
9
12
  //# sourceMappingURL=config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../../src/llm/vercel-ai/config.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,QAAQ,GAAG,WAAW,GAAG,QAAQ,GAAG,YAAY,CAAC;IAC3D,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../../src/llm/vercel-ai/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AAExC;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,iFAAiF;IACjF,QAAQ,EAAE,aAAa,CAAC;IACxB,mEAAmE;IACnE,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB"}
@@ -1,46 +1,23 @@
1
- import type { Episode } from '../types';
2
- import type { EpisodeAdapter, EpisodeQuery, MemoryAdapter, RecallQuery, Reflection } from './types';
3
1
  /**
4
- * In-memory implementation of both EpisodeAdapter and MemoryAdapter.
5
- *
6
- * Useful for demos, testing, and prototyping. Data is lost on process exit
7
- * unless explicitly serialized via `toJSON()` / `fromJSON()`.
8
- *
9
- * Can be used as:
10
- * - `memory: { episodes: new InMemoryEpisodeAdapter() }` (split config)
11
- * - `memory: new InMemoryEpisodeAdapter()` (single adapter)
2
+ * In-memory adapter for testing purposes.
3
+ * Not recommended for production use (data is lost on restart).
12
4
  */
13
- export declare class InMemoryEpisodeAdapter implements EpisodeAdapter, MemoryAdapter {
5
+ import type { Episode, Reflection } from './types';
6
+ import type { MemoryAdapter, RecallQuery } from './types';
7
+ /**
8
+ * Simple in-memory adapter for testing.
9
+ * Stores episodes in memory only.
10
+ */
11
+ export declare class InMemoryAdapter implements MemoryAdapter {
14
12
  private episodes;
15
13
  private reflections;
16
14
  saveEpisode(episode: Episode): Promise<void>;
17
- /**
18
- * Recall episodes by query.
19
- * Accepts both `EpisodeQuery` (with `contextContains`) and `RecallQuery` (with `context`).
20
- */
21
- recall(query: EpisodeQuery | RecallQuery): Promise<Episode[]>;
22
- getByIds(ids: string[]): Promise<Episode[]>;
15
+ recall(query: RecallQuery): Promise<Episode[]>;
23
16
  saveReflection(reflection: Reflection): Promise<void>;
24
- getReflections(sourceEntity?: string, limit?: number): Promise<Reflection[]>;
25
- /** Export all data for persistence (save slots, etc.). */
26
- toJSON(): {
27
- episodes: Episode[];
28
- reflections: Reflection[];
29
- };
30
- /** Restore data from a previous export. */
31
- fromJSON(data: {
32
- episodes?: Episode[];
33
- reflections?: Reflection[];
34
- }): void;
35
- /** Number of stored episodes. */
36
- get episodeCount(): number;
37
- /** Number of stored reflections. */
38
- get reflectionCount(): number;
39
- /** Clear all data. */
17
+ getReflections(sourceEntity?: string): Promise<Reflection[]>;
18
+ /** Clear all stored data (for testing). */
40
19
  clear(): void;
41
20
  }
42
- /** @deprecated Use InMemoryEpisodeAdapter */
43
- export declare const InMemoryEpisodeStore: typeof InMemoryEpisodeAdapter;
44
- /** @deprecated Use InMemoryEpisodeAdapter */
45
- export type InMemoryEpisodeStore = InMemoryEpisodeAdapter;
21
+ /** @deprecated Use InMemoryAdapter */
22
+ export declare const InMemoryEpisodeAdapter: typeof InMemoryAdapter;
46
23
  //# sourceMappingURL=in-memory.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"in-memory.d.ts","sourceRoot":"","sources":["../../../src/memory/in-memory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AACxC,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAEpG;;;;;;;;;GASG;AACH,qBAAa,sBAAuB,YAAW,cAAc,EAAE,aAAa;IAC1E,OAAO,CAAC,QAAQ,CAAiB;IACjC,OAAO,CAAC,WAAW,CAAoB;IAEjC,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IASlD;;;OAGG;IACG,MAAM,CAAC,KAAK,EAAE,YAAY,GAAG,WAAW,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IA0C7D,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAK3C,cAAc,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IASrD,cAAc,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAelF,0DAA0D;IAC1D,MAAM,IAAI;QAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;QAAC,WAAW,EAAE,UAAU,EAAE,CAAA;KAAE;IAO5D,2CAA2C;IAC3C,QAAQ,CAAC,IAAI,EAAE;QAAE,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC;QAAC,WAAW,CAAC,EAAE,UAAU,EAAE,CAAA;KAAE,GAAG,IAAI;IAK1E,iCAAiC;IACjC,IAAI,YAAY,IAAI,MAAM,CAEzB;IAED,oCAAoC;IACpC,IAAI,eAAe,IAAI,MAAM,CAE5B;IAED,sBAAsB;IACtB,KAAK,IAAI,IAAI;CAId;AAED,6CAA6C;AAC7C,eAAO,MAAM,oBAAoB,+BAAyB,CAAC;AAC3D,6CAA6C;AAC7C,MAAM,MAAM,oBAAoB,GAAG,sBAAsB,CAAC"}
1
+ {"version":3,"file":"in-memory.d.ts","sourceRoot":"","sources":["../../../src/memory/in-memory.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAE1D;;;GAGG;AACH,qBAAa,eAAgB,YAAW,aAAa;IACnD,OAAO,CAAC,QAAQ,CAAiB;IACjC,OAAO,CAAC,WAAW,CAAoB;IAEjC,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAI5C,MAAM,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAwB9C,cAAc,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAIrD,cAAc,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAOlE,2CAA2C;IAC3C,KAAK,IAAI,IAAI;CAId;AAED,sCAAsC;AACtC,eAAO,MAAM,sBAAsB,wBAAkB,CAAC"}
@@ -1,115 +1,52 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.InMemoryEpisodeStore = exports.InMemoryEpisodeAdapter = void 0;
3
+ exports.InMemoryEpisodeAdapter = exports.InMemoryAdapter = void 0;
4
4
  /**
5
- * In-memory implementation of both EpisodeAdapter and MemoryAdapter.
6
- *
7
- * Useful for demos, testing, and prototyping. Data is lost on process exit
8
- * unless explicitly serialized via `toJSON()` / `fromJSON()`.
9
- *
10
- * Can be used as:
11
- * - `memory: { episodes: new InMemoryEpisodeAdapter() }` (split config)
12
- * - `memory: new InMemoryEpisodeAdapter()` (single adapter)
5
+ * Simple in-memory adapter for testing.
6
+ * Stores episodes in memory only.
13
7
  */
14
- class InMemoryEpisodeAdapter {
8
+ class InMemoryAdapter {
15
9
  constructor() {
16
10
  this.episodes = [];
17
11
  this.reflections = [];
18
12
  }
19
13
  async saveEpisode(episode) {
20
- const idx = this.episodes.findIndex(e => e.id === episode.id);
21
- if (idx >= 0) {
22
- this.episodes[idx] = episode;
23
- }
24
- else {
25
- this.episodes.push(episode);
26
- }
14
+ this.episodes.push(episode);
27
15
  }
28
- /**
29
- * Recall episodes by query.
30
- * Accepts both `EpisodeQuery` (with `contextContains`) and `RecallQuery` (with `context`).
31
- */
32
16
  async recall(query) {
33
17
  let results = [...this.episodes];
34
18
  if (query.sourceEntity) {
35
- results = results.filter(e => e.sourceEntity === query.sourceEntity);
19
+ results = results.filter(ep => ep.sourceEntity === query.sourceEntity);
36
20
  }
37
- // Support both EpisodeQuery.contextContains and RecallQuery.context
38
- const contextSearch = ('contextContains' in query ? query.contextContains : undefined)
39
- ?? ('context' in query ? query.context : undefined);
40
- if (contextSearch) {
41
- const lower = contextSearch.toLowerCase();
42
- results = results.filter(e => e.context?.toLowerCase().includes(lower));
43
- }
44
- if (query.type !== undefined) {
21
+ if (query.type) {
45
22
  const types = Array.isArray(query.type) ? query.type : [query.type];
46
- results = results.filter(e => e.type !== undefined && types.includes(e.type));
23
+ results = results.filter(ep => ep.type && types.includes(ep.type));
47
24
  }
48
25
  if (query.minImportance !== undefined) {
49
- results = results.filter(e => e.importance >= query.minImportance);
50
- }
51
- if (query.timeRange) {
52
- const [from, to] = query.timeRange;
53
- results = results.filter(e => e.timestamp >= from && e.timestamp <= to);
26
+ results = results.filter(ep => ep.importance >= query.minImportance);
54
27
  }
55
- if ('valenceRange' in query && query.valenceRange) {
56
- const [min, max] = query.valenceRange;
57
- results = results.filter(e => e.emotionSnapshot.V >= min && e.emotionSnapshot.V <= max);
58
- }
59
- // Sort by timestamp descending (most recent first)
28
+ // Sort by timestamp desc
60
29
  results.sort((a, b) => b.timestamp - a.timestamp);
61
- const limit = query.limit ?? 10;
62
- return results.slice(0, limit);
63
- }
64
- async getByIds(ids) {
65
- const idSet = new Set(ids);
66
- return this.episodes.filter(e => idSet.has(e.id));
30
+ if (query.limit) {
31
+ results = results.slice(0, query.limit);
32
+ }
33
+ return results;
67
34
  }
68
35
  async saveReflection(reflection) {
69
- const idx = this.reflections.findIndex(r => r.id === reflection.id);
70
- if (idx >= 0) {
71
- this.reflections[idx] = reflection;
72
- }
73
- else {
74
- this.reflections.push(reflection);
75
- }
36
+ this.reflections.push(reflection);
76
37
  }
77
- async getReflections(sourceEntity, limit) {
78
- let results = [...this.reflections];
38
+ async getReflections(sourceEntity) {
79
39
  if (sourceEntity) {
80
- results = results.filter(r => r.sourceEntity === sourceEntity);
40
+ return this.reflections.filter(r => r.sourceEntity === sourceEntity);
81
41
  }
82
- // Sort by timestamp descending
83
- results.sort((a, b) => b.timestamp - a.timestamp);
84
- return results.slice(0, limit ?? 10);
85
- }
86
- // ── Serialization helpers ──
87
- /** Export all data for persistence (save slots, etc.). */
88
- toJSON() {
89
- return {
90
- episodes: [...this.episodes],
91
- reflections: [...this.reflections],
92
- };
93
- }
94
- /** Restore data from a previous export. */
95
- fromJSON(data) {
96
- this.episodes = data.episodes ? [...data.episodes] : [];
97
- this.reflections = data.reflections ? [...data.reflections] : [];
98
- }
99
- /** Number of stored episodes. */
100
- get episodeCount() {
101
- return this.episodes.length;
102
- }
103
- /** Number of stored reflections. */
104
- get reflectionCount() {
105
- return this.reflections.length;
42
+ return [...this.reflections];
106
43
  }
107
- /** Clear all data. */
44
+ /** Clear all stored data (for testing). */
108
45
  clear() {
109
46
  this.episodes = [];
110
47
  this.reflections = [];
111
48
  }
112
49
  }
113
- exports.InMemoryEpisodeAdapter = InMemoryEpisodeAdapter;
114
- /** @deprecated Use InMemoryEpisodeAdapter */
115
- exports.InMemoryEpisodeStore = InMemoryEpisodeAdapter;
50
+ exports.InMemoryAdapter = InMemoryAdapter;
51
+ /** @deprecated Use InMemoryAdapter */
52
+ exports.InMemoryEpisodeAdapter = InMemoryAdapter;