@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.
Files changed (293) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +251 -0
  3. package/dist/cjs/api-client.d.ts +23 -0
  4. package/dist/cjs/api-client.d.ts.map +1 -0
  5. package/dist/cjs/api-client.js +55 -0
  6. package/dist/cjs/defaults/index.d.ts +8 -0
  7. package/dist/cjs/defaults/index.d.ts.map +1 -0
  8. package/dist/cjs/defaults/index.js +30 -0
  9. package/dist/cjs/defaults/persona.json +17 -0
  10. package/dist/cjs/embedding/cloudflare.d.ts +15 -0
  11. package/dist/cjs/embedding/cloudflare.d.ts.map +1 -0
  12. package/dist/cjs/embedding/cloudflare.js +16 -0
  13. package/dist/cjs/embedding/cohere.d.ts +8 -0
  14. package/dist/cjs/embedding/cohere.d.ts.map +1 -0
  15. package/dist/cjs/embedding/cohere.js +31 -0
  16. package/dist/cjs/embedding/index.d.ts +9 -0
  17. package/dist/cjs/embedding/index.d.ts.map +1 -0
  18. package/dist/cjs/embedding/index.js +11 -0
  19. package/dist/cjs/embedding/local.d.ts +6 -0
  20. package/dist/cjs/embedding/local.d.ts.map +1 -0
  21. package/dist/cjs/embedding/local.js +28 -0
  22. package/dist/cjs/embedding/openai.d.ts +9 -0
  23. package/dist/cjs/embedding/openai.d.ts.map +1 -0
  24. package/dist/cjs/embedding/openai.js +26 -0
  25. package/dist/cjs/errors.d.ts +17 -0
  26. package/dist/cjs/errors.d.ts.map +1 -0
  27. package/dist/cjs/errors.js +21 -0
  28. package/dist/cjs/events/console.d.ts +25 -0
  29. package/dist/cjs/events/console.d.ts.map +1 -0
  30. package/dist/cjs/events/console.js +41 -0
  31. package/dist/cjs/events/types.d.ts +28 -0
  32. package/dist/cjs/events/types.d.ts.map +1 -0
  33. package/dist/cjs/events/types.js +13 -0
  34. package/dist/cjs/events/webhook.d.ts +30 -0
  35. package/dist/cjs/events/webhook.d.ts.map +1 -0
  36. package/dist/cjs/events/webhook.js +79 -0
  37. package/dist/cjs/generate/persona.d.ts +16 -0
  38. package/dist/cjs/generate/persona.d.ts.map +1 -0
  39. package/dist/cjs/generate/persona.js +42 -0
  40. package/dist/cjs/generate/prompt.d.ts +7 -0
  41. package/dist/cjs/generate/prompt.d.ts.map +1 -0
  42. package/dist/cjs/generate/prompt.js +41 -0
  43. package/dist/cjs/generate/schema.d.ts +32 -0
  44. package/dist/cjs/generate/schema.d.ts.map +1 -0
  45. package/dist/cjs/generate/schema.js +54 -0
  46. package/dist/cjs/generated/index.d.ts +2 -0
  47. package/dist/cjs/generated/index.d.ts.map +1 -0
  48. package/dist/cjs/generated/index.js +2 -0
  49. package/dist/cjs/index.d.ts +66 -0
  50. package/dist/cjs/index.d.ts.map +1 -0
  51. package/dist/cjs/index.js +69 -0
  52. package/dist/cjs/llm/adapter.d.ts +61 -0
  53. package/dist/cjs/llm/adapter.d.ts.map +1 -0
  54. package/dist/cjs/llm/adapter.js +2 -0
  55. package/dist/cjs/llm/resolve.d.ts +28 -0
  56. package/dist/cjs/llm/resolve.d.ts.map +1 -0
  57. package/dist/cjs/llm/resolve.js +20 -0
  58. package/dist/cjs/llm/schema.d.ts +60 -0
  59. package/dist/cjs/llm/schema.d.ts.map +1 -0
  60. package/dist/cjs/llm/schema.js +72 -0
  61. package/dist/cjs/llm/types.d.ts +24 -0
  62. package/dist/cjs/llm/types.d.ts.map +1 -0
  63. package/dist/cjs/llm/types.js +2 -0
  64. package/dist/cjs/llm/vercel-ai/adapter.d.ts +29 -0
  65. package/dist/cjs/llm/vercel-ai/adapter.d.ts.map +1 -0
  66. package/dist/cjs/llm/vercel-ai/adapter.js +234 -0
  67. package/dist/cjs/llm/vercel-ai/config.d.ts +9 -0
  68. package/dist/cjs/llm/vercel-ai/config.d.ts.map +1 -0
  69. package/dist/cjs/llm/vercel-ai/config.js +2 -0
  70. package/dist/cjs/llm/vercel-ai/index.d.ts +9 -0
  71. package/dist/cjs/llm/vercel-ai/index.d.ts.map +1 -0
  72. package/dist/cjs/llm/vercel-ai/index.js +13 -0
  73. package/dist/cjs/memory/cloudflare/index.d.ts +3 -0
  74. package/dist/cjs/memory/cloudflare/index.d.ts.map +1 -0
  75. package/dist/cjs/memory/cloudflare/index.js +5 -0
  76. package/dist/cjs/memory/cloudflare/vectorize.d.ts +62 -0
  77. package/dist/cjs/memory/cloudflare/vectorize.d.ts.map +1 -0
  78. package/dist/cjs/memory/cloudflare/vectorize.js +55 -0
  79. package/dist/cjs/memory/in-memory-semantic.d.ts +16 -0
  80. package/dist/cjs/memory/in-memory-semantic.d.ts.map +1 -0
  81. package/dist/cjs/memory/in-memory-semantic.js +57 -0
  82. package/dist/cjs/memory/in-memory.d.ts +46 -0
  83. package/dist/cjs/memory/in-memory.d.ts.map +1 -0
  84. package/dist/cjs/memory/in-memory.js +115 -0
  85. package/dist/cjs/memory/pinecone/index.d.ts +7 -0
  86. package/dist/cjs/memory/pinecone/index.d.ts.map +1 -0
  87. package/dist/cjs/memory/pinecone/index.js +8 -0
  88. package/dist/cjs/memory/pinecone/memory-adapter.d.ts +62 -0
  89. package/dist/cjs/memory/pinecone/memory-adapter.d.ts.map +1 -0
  90. package/dist/cjs/memory/pinecone/memory-adapter.js +220 -0
  91. package/dist/cjs/memory/pinecone/semantic.d.ts +44 -0
  92. package/dist/cjs/memory/pinecone/semantic.d.ts.map +1 -0
  93. package/dist/cjs/memory/pinecone/semantic.js +90 -0
  94. package/dist/cjs/memory/recall.d.ts +58 -0
  95. package/dist/cjs/memory/recall.d.ts.map +1 -0
  96. package/dist/cjs/memory/recall.js +220 -0
  97. package/dist/cjs/memory/semantic.d.ts +24 -0
  98. package/dist/cjs/memory/semantic.d.ts.map +1 -0
  99. package/dist/cjs/memory/semantic.js +2 -0
  100. package/dist/cjs/memory/sqlite/index.d.ts +3 -0
  101. package/dist/cjs/memory/sqlite/index.d.ts.map +1 -0
  102. package/dist/cjs/memory/sqlite/index.js +5 -0
  103. package/dist/cjs/memory/sqlite/memory-adapter.d.ts +58 -0
  104. package/dist/cjs/memory/sqlite/memory-adapter.d.ts.map +1 -0
  105. package/dist/cjs/memory/sqlite/memory-adapter.js +336 -0
  106. package/dist/cjs/memory/sqlite/schema.d.ts +4 -0
  107. package/dist/cjs/memory/sqlite/schema.d.ts.map +1 -0
  108. package/dist/cjs/memory/sqlite/schema.js +91 -0
  109. package/dist/cjs/memory/supabase/index.d.ts +7 -0
  110. package/dist/cjs/memory/supabase/index.d.ts.map +1 -0
  111. package/dist/cjs/memory/supabase/index.js +8 -0
  112. package/dist/cjs/memory/supabase/memory-adapter.d.ts +67 -0
  113. package/dist/cjs/memory/supabase/memory-adapter.d.ts.map +1 -0
  114. package/dist/cjs/memory/supabase/memory-adapter.js +335 -0
  115. package/dist/cjs/memory/supabase/semantic.d.ts +44 -0
  116. package/dist/cjs/memory/supabase/semantic.d.ts.map +1 -0
  117. package/dist/cjs/memory/supabase/semantic.js +72 -0
  118. package/dist/cjs/memory/types.d.ts +231 -0
  119. package/dist/cjs/memory/types.d.ts.map +1 -0
  120. package/dist/cjs/memory/types.js +12 -0
  121. package/dist/cjs/persona.d.ts +326 -0
  122. package/dist/cjs/persona.d.ts.map +1 -0
  123. package/dist/cjs/persona.js +824 -0
  124. package/dist/cjs/types.d.ts +263 -0
  125. package/dist/cjs/types.d.ts.map +1 -0
  126. package/dist/cjs/types.js +15 -0
  127. package/dist/cjs/world/client.d.ts +36 -0
  128. package/dist/cjs/world/client.d.ts.map +1 -0
  129. package/dist/cjs/world/client.js +59 -0
  130. package/dist/cjs/world/errors.d.ts +9 -0
  131. package/dist/cjs/world/errors.d.ts.map +1 -0
  132. package/dist/cjs/world/errors.js +15 -0
  133. package/dist/cjs/world/index.d.ts +10 -0
  134. package/dist/cjs/world/index.d.ts.map +1 -0
  135. package/dist/cjs/world/index.js +16 -0
  136. package/dist/cjs/world/types.d.ts +101 -0
  137. package/dist/cjs/world/types.d.ts.map +1 -0
  138. package/dist/cjs/world/types.js +8 -0
  139. package/dist/cjs/world/village.d.ts +75 -0
  140. package/dist/cjs/world/village.d.ts.map +1 -0
  141. package/dist/cjs/world/village.js +278 -0
  142. package/dist/cjs/world/world-persona.d.ts +182 -0
  143. package/dist/cjs/world/world-persona.d.ts.map +1 -0
  144. package/dist/cjs/world/world-persona.js +192 -0
  145. package/dist/cjs/world/world.d.ts +41 -0
  146. package/dist/cjs/world/world.d.ts.map +1 -0
  147. package/dist/cjs/world/world.js +91 -0
  148. package/dist/esm/api-client.d.ts +23 -0
  149. package/dist/esm/api-client.d.ts.map +1 -0
  150. package/dist/esm/api-client.js +48 -0
  151. package/dist/esm/defaults/index.d.ts +8 -0
  152. package/dist/esm/defaults/index.d.ts.map +1 -0
  153. package/dist/esm/defaults/index.js +23 -0
  154. package/dist/esm/defaults/persona.json +17 -0
  155. package/dist/esm/embedding/cloudflare.d.ts +15 -0
  156. package/dist/esm/embedding/cloudflare.d.ts.map +1 -0
  157. package/dist/esm/embedding/cloudflare.js +13 -0
  158. package/dist/esm/embedding/cohere.d.ts +8 -0
  159. package/dist/esm/embedding/cohere.d.ts.map +1 -0
  160. package/dist/esm/embedding/cohere.js +28 -0
  161. package/dist/esm/embedding/index.d.ts +9 -0
  162. package/dist/esm/embedding/index.d.ts.map +1 -0
  163. package/dist/esm/embedding/index.js +4 -0
  164. package/dist/esm/embedding/local.d.ts +6 -0
  165. package/dist/esm/embedding/local.d.ts.map +1 -0
  166. package/dist/esm/embedding/local.js +25 -0
  167. package/dist/esm/embedding/openai.d.ts +9 -0
  168. package/dist/esm/embedding/openai.d.ts.map +1 -0
  169. package/dist/esm/embedding/openai.js +23 -0
  170. package/dist/esm/errors.d.ts +17 -0
  171. package/dist/esm/errors.d.ts.map +1 -0
  172. package/dist/esm/errors.js +17 -0
  173. package/dist/esm/events/console.d.ts +25 -0
  174. package/dist/esm/events/console.d.ts.map +1 -0
  175. package/dist/esm/events/console.js +37 -0
  176. package/dist/esm/events/types.d.ts +28 -0
  177. package/dist/esm/events/types.d.ts.map +1 -0
  178. package/dist/esm/events/types.js +12 -0
  179. package/dist/esm/events/webhook.d.ts +30 -0
  180. package/dist/esm/events/webhook.d.ts.map +1 -0
  181. package/dist/esm/events/webhook.js +75 -0
  182. package/dist/esm/generate/persona.d.ts +16 -0
  183. package/dist/esm/generate/persona.d.ts.map +1 -0
  184. package/dist/esm/generate/persona.js +39 -0
  185. package/dist/esm/generate/prompt.d.ts +7 -0
  186. package/dist/esm/generate/prompt.d.ts.map +1 -0
  187. package/dist/esm/generate/prompt.js +38 -0
  188. package/dist/esm/generate/schema.d.ts +32 -0
  189. package/dist/esm/generate/schema.d.ts.map +1 -0
  190. package/dist/esm/generate/schema.js +51 -0
  191. package/dist/esm/generated/index.d.ts +2 -0
  192. package/dist/esm/generated/index.d.ts.map +1 -0
  193. package/dist/esm/generated/index.js +1 -0
  194. package/dist/esm/index.d.ts +66 -0
  195. package/dist/esm/index.d.ts.map +1 -0
  196. package/dist/esm/index.js +49 -0
  197. package/dist/esm/llm/adapter.d.ts +61 -0
  198. package/dist/esm/llm/adapter.d.ts.map +1 -0
  199. package/dist/esm/llm/adapter.js +1 -0
  200. package/dist/esm/llm/resolve.d.ts +28 -0
  201. package/dist/esm/llm/resolve.d.ts.map +1 -0
  202. package/dist/esm/llm/resolve.js +17 -0
  203. package/dist/esm/llm/schema.d.ts +60 -0
  204. package/dist/esm/llm/schema.d.ts.map +1 -0
  205. package/dist/esm/llm/schema.js +69 -0
  206. package/dist/esm/llm/types.d.ts +24 -0
  207. package/dist/esm/llm/types.d.ts.map +1 -0
  208. package/dist/esm/llm/types.js +1 -0
  209. package/dist/esm/llm/vercel-ai/adapter.d.ts +29 -0
  210. package/dist/esm/llm/vercel-ai/adapter.d.ts.map +1 -0
  211. package/dist/esm/llm/vercel-ai/adapter.js +196 -0
  212. package/dist/esm/llm/vercel-ai/config.d.ts +9 -0
  213. package/dist/esm/llm/vercel-ai/config.d.ts.map +1 -0
  214. package/dist/esm/llm/vercel-ai/config.js +1 -0
  215. package/dist/esm/llm/vercel-ai/index.d.ts +9 -0
  216. package/dist/esm/llm/vercel-ai/index.d.ts.map +1 -0
  217. package/dist/esm/llm/vercel-ai/index.js +8 -0
  218. package/dist/esm/memory/cloudflare/index.d.ts +3 -0
  219. package/dist/esm/memory/cloudflare/index.d.ts.map +1 -0
  220. package/dist/esm/memory/cloudflare/index.js +1 -0
  221. package/dist/esm/memory/cloudflare/vectorize.d.ts +62 -0
  222. package/dist/esm/memory/cloudflare/vectorize.d.ts.map +1 -0
  223. package/dist/esm/memory/cloudflare/vectorize.js +51 -0
  224. package/dist/esm/memory/in-memory-semantic.d.ts +16 -0
  225. package/dist/esm/memory/in-memory-semantic.d.ts.map +1 -0
  226. package/dist/esm/memory/in-memory-semantic.js +53 -0
  227. package/dist/esm/memory/in-memory.d.ts +46 -0
  228. package/dist/esm/memory/in-memory.d.ts.map +1 -0
  229. package/dist/esm/memory/in-memory.js +111 -0
  230. package/dist/esm/memory/pinecone/index.d.ts +7 -0
  231. package/dist/esm/memory/pinecone/index.d.ts.map +1 -0
  232. package/dist/esm/memory/pinecone/index.js +3 -0
  233. package/dist/esm/memory/pinecone/memory-adapter.d.ts +62 -0
  234. package/dist/esm/memory/pinecone/memory-adapter.d.ts.map +1 -0
  235. package/dist/esm/memory/pinecone/memory-adapter.js +216 -0
  236. package/dist/esm/memory/pinecone/semantic.d.ts +44 -0
  237. package/dist/esm/memory/pinecone/semantic.d.ts.map +1 -0
  238. package/dist/esm/memory/pinecone/semantic.js +86 -0
  239. package/dist/esm/memory/recall.d.ts +58 -0
  240. package/dist/esm/memory/recall.d.ts.map +1 -0
  241. package/dist/esm/memory/recall.js +215 -0
  242. package/dist/esm/memory/semantic.d.ts +24 -0
  243. package/dist/esm/memory/semantic.d.ts.map +1 -0
  244. package/dist/esm/memory/semantic.js +1 -0
  245. package/dist/esm/memory/sqlite/index.d.ts +3 -0
  246. package/dist/esm/memory/sqlite/index.d.ts.map +1 -0
  247. package/dist/esm/memory/sqlite/index.js +1 -0
  248. package/dist/esm/memory/sqlite/memory-adapter.d.ts +58 -0
  249. package/dist/esm/memory/sqlite/memory-adapter.d.ts.map +1 -0
  250. package/dist/esm/memory/sqlite/memory-adapter.js +296 -0
  251. package/dist/esm/memory/sqlite/schema.d.ts +4 -0
  252. package/dist/esm/memory/sqlite/schema.d.ts.map +1 -0
  253. package/dist/esm/memory/sqlite/schema.js +86 -0
  254. package/dist/esm/memory/supabase/index.d.ts +7 -0
  255. package/dist/esm/memory/supabase/index.d.ts.map +1 -0
  256. package/dist/esm/memory/supabase/index.js +3 -0
  257. package/dist/esm/memory/supabase/memory-adapter.d.ts +67 -0
  258. package/dist/esm/memory/supabase/memory-adapter.d.ts.map +1 -0
  259. package/dist/esm/memory/supabase/memory-adapter.js +331 -0
  260. package/dist/esm/memory/supabase/semantic.d.ts +44 -0
  261. package/dist/esm/memory/supabase/semantic.d.ts.map +1 -0
  262. package/dist/esm/memory/supabase/semantic.js +68 -0
  263. package/dist/esm/memory/types.d.ts +231 -0
  264. package/dist/esm/memory/types.d.ts.map +1 -0
  265. package/dist/esm/memory/types.js +9 -0
  266. package/dist/esm/persona.d.ts +326 -0
  267. package/dist/esm/persona.d.ts.map +1 -0
  268. package/dist/esm/persona.js +787 -0
  269. package/dist/esm/types.d.ts +263 -0
  270. package/dist/esm/types.d.ts.map +1 -0
  271. package/dist/esm/types.js +11 -0
  272. package/dist/esm/world/client.d.ts +36 -0
  273. package/dist/esm/world/client.d.ts.map +1 -0
  274. package/dist/esm/world/client.js +52 -0
  275. package/dist/esm/world/errors.d.ts +9 -0
  276. package/dist/esm/world/errors.d.ts.map +1 -0
  277. package/dist/esm/world/errors.js +11 -0
  278. package/dist/esm/world/index.d.ts +10 -0
  279. package/dist/esm/world/index.d.ts.map +1 -0
  280. package/dist/esm/world/index.js +8 -0
  281. package/dist/esm/world/types.d.ts +101 -0
  282. package/dist/esm/world/types.d.ts.map +1 -0
  283. package/dist/esm/world/types.js +7 -0
  284. package/dist/esm/world/village.d.ts +75 -0
  285. package/dist/esm/world/village.d.ts.map +1 -0
  286. package/dist/esm/world/village.js +274 -0
  287. package/dist/esm/world/world-persona.d.ts +182 -0
  288. package/dist/esm/world/world-persona.d.ts.map +1 -0
  289. package/dist/esm/world/world-persona.js +188 -0
  290. package/dist/esm/world/world.d.ts +41 -0
  291. package/dist/esm/world/world.d.ts.map +1 -0
  292. package/dist/esm/world/world.js +87 -0
  293. package/package.json +207 -0
@@ -0,0 +1,41 @@
1
+ import { type ApiClient } from './client';
2
+ import { Village } from './village';
3
+ import type { VillageData, CreateVillageOptions, PaginationOptions } from './types';
4
+ export interface WorldOptions {
5
+ apiKey: string;
6
+ baseUrl?: string;
7
+ }
8
+ /**
9
+ * Entry point for the World SDK.
10
+ *
11
+ * @example
12
+ * ```typescript
13
+ * import { World } from '@molroo-io/sdk';
14
+ *
15
+ * const world = new World({ apiKey: 'mk_live_...' });
16
+ * const village = await world.createVillage({ name: 'My Village' });
17
+ * const result = await village.interact({ target: 'sera', action: 'greet' });
18
+ * ```
19
+ */
20
+ export declare class World {
21
+ /** @internal — exposed for advanced use only. */
22
+ readonly _client: ApiClient;
23
+ constructor(options: WorldOptions);
24
+ /**
25
+ * Create a new village and return a {@link Village} instance.
26
+ */
27
+ createVillage(options: CreateVillageOptions): Promise<Village>;
28
+ /**
29
+ * Fetch an existing village by ID and return a {@link Village} instance.
30
+ */
31
+ getVillage(id: string): Promise<Village>;
32
+ /**
33
+ * List villages. Returns raw data objects (not Village instances) for
34
+ * efficiency when only metadata is needed.
35
+ */
36
+ listVillages(options?: PaginationOptions): Promise<{
37
+ villages: VillageData[];
38
+ nextCursor: string | null;
39
+ }>;
40
+ }
41
+ //# sourceMappingURL=world.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"world.d.ts","sourceRoot":"","sources":["../../../src/world/world.ts"],"names":[],"mappings":"AACA,OAAO,EAA6B,KAAK,SAAS,EAAE,MAAM,UAAU,CAAC;AACrE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,EACV,WAAW,EACX,oBAAoB,EACpB,iBAAiB,EAClB,MAAM,SAAS,CAAC;AAiCjB,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAQD;;;;;;;;;;;GAWG;AACH,qBAAa,KAAK;IAChB,iDAAiD;IACjD,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAC;gBAEhB,OAAO,EAAE,YAAY;IAOjC;;OAEG;IACG,aAAa,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,OAAO,CAAC;IAwBpE;;OAEG;IACG,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAmB9C;;;OAGG;IACG,YAAY,CAChB,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAAC;QAAE,QAAQ,EAAE,WAAW,EAAE,CAAC;QAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;CA6BnE"}
@@ -0,0 +1,91 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.World = void 0;
4
+ // INFO: @F001 Top-level domain class — see plan step 4
5
+ const client_1 = require("./client");
6
+ const village_1 = require("./village");
7
+ // ---------------------------------------------------------------------------
8
+ // Internal helper
9
+ // ---------------------------------------------------------------------------
10
+ /** Map raw snake_case API village object to camelCase VillageData. */
11
+ function toVillageData(raw) {
12
+ return {
13
+ id: raw.id,
14
+ tenantId: raw.tenant_id,
15
+ name: raw.name,
16
+ description: raw.description,
17
+ accessPolicy: raw.access_policy,
18
+ responseRule: raw.response_rule,
19
+ createdAt: raw.created_at,
20
+ updatedAt: raw.updated_at,
21
+ };
22
+ }
23
+ const DEFAULT_BASE_URL = 'https://api.molroo.io';
24
+ // ---------------------------------------------------------------------------
25
+ // World class
26
+ // ---------------------------------------------------------------------------
27
+ /**
28
+ * Entry point for the World SDK.
29
+ *
30
+ * @example
31
+ * ```typescript
32
+ * import { World } from '@molroo-io/sdk';
33
+ *
34
+ * const world = new World({ apiKey: 'mk_live_...' });
35
+ * const village = await world.createVillage({ name: 'My Village' });
36
+ * const result = await village.interact({ target: 'sera', action: 'greet' });
37
+ * ```
38
+ */
39
+ class World {
40
+ constructor(options) {
41
+ this._client = (0, client_1.createWorldClient)({
42
+ baseUrl: options.baseUrl ?? DEFAULT_BASE_URL,
43
+ apiKey: options.apiKey,
44
+ });
45
+ }
46
+ /**
47
+ * Create a new village and return a {@link Village} instance.
48
+ */
49
+ async createVillage(options) {
50
+ const { data } = await this._client.POST('/villages', {
51
+ body: {
52
+ name: options.name,
53
+ description: options.description,
54
+ access_policy: options.accessPolicy,
55
+ response_rule: options.responseRule,
56
+ },
57
+ });
58
+ const raw = (0, client_1.unwrap)(data);
59
+ return new village_1.Village(this._client, toVillageData(raw));
60
+ }
61
+ /**
62
+ * Fetch an existing village by ID and return a {@link Village} instance.
63
+ */
64
+ async getVillage(id) {
65
+ const { data } = await this._client.GET('/villages/{id}', {
66
+ params: { path: { id } },
67
+ });
68
+ const raw = (0, client_1.unwrap)(data);
69
+ return new village_1.Village(this._client, toVillageData(raw));
70
+ }
71
+ /**
72
+ * List villages. Returns raw data objects (not Village instances) for
73
+ * efficiency when only metadata is needed.
74
+ */
75
+ async listVillages(options) {
76
+ const { data } = await this._client.GET('/villages', {
77
+ params: {
78
+ query: {
79
+ limit: options?.limit?.toString(),
80
+ cursor: options?.cursor,
81
+ },
82
+ },
83
+ });
84
+ const raw = (0, client_1.unwrap)(data);
85
+ return {
86
+ villages: (raw.villages ?? []).map(toVillageData),
87
+ nextCursor: raw.nextCursor ?? null,
88
+ };
89
+ }
90
+ }
91
+ exports.World = World;
@@ -0,0 +1,23 @@
1
+ import type { paths } from './generated/api';
2
+ /**
3
+ * Create a typed openapi-fetch client for the molroo API.
4
+ *
5
+ * @param baseUrl - API base URL (e.g., 'https://api.molroo.io').
6
+ * @param apiKey - API key for authentication.
7
+ * @returns A fully-typed openapi-fetch client instance.
8
+ */
9
+ export declare function createApiClient(baseUrl: string, apiKey: string): import("openapi-fetch").Client<paths, `${string}/${string}`>;
10
+ export type ApiClient = ReturnType<typeof createApiClient>;
11
+ /**
12
+ * Unwrap the `{ result: T }` envelope from API responses.
13
+ *
14
+ * Many API endpoints return `ResultWrapper` (typed as `{ result?: unknown }`)
15
+ * in the OpenAPI spec. This helper extracts the `result` field and casts it
16
+ * to the expected type.
17
+ *
18
+ * For endpoints with properly-typed response schemas, use `data.result` directly.
19
+ */
20
+ export declare function unwrap<T>(data: {
21
+ result?: unknown;
22
+ } | undefined): T;
23
+ //# sourceMappingURL=api-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-client.d.ts","sourceRoot":"","sources":["../../src/api-client.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAwB7C;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,gEAU9D;AAED,MAAM,MAAM,SAAS,GAAG,UAAU,CAAC,OAAO,eAAe,CAAC,CAAC;AAE3D;;;;;;;;GAQG;AACH,wBAAgB,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,SAAS,GAAG,CAAC,CAEnE"}
@@ -0,0 +1,48 @@
1
+ import createClient from 'openapi-fetch';
2
+ import { MolrooApiError } from './errors';
3
+ /**
4
+ * Middleware: throw MolrooApiError on non-OK responses.
5
+ *
6
+ * Reads the error body `{ error: { code, message } }` and converts it
7
+ * into a typed MolrooApiError before openapi-fetch processes the response.
8
+ */
9
+ const errorMiddleware = {
10
+ async onResponse({ response }) {
11
+ if (!response.ok) {
12
+ const body = await response.clone().json().catch(() => ({}));
13
+ const err = body;
14
+ throw new MolrooApiError(err.error?.message ?? `API error ${response.status}`, err.error?.code ?? 'UNKNOWN', response.status);
15
+ }
16
+ // Return undefined to let openapi-fetch handle the response unchanged
17
+ },
18
+ };
19
+ /**
20
+ * Create a typed openapi-fetch client for the molroo API.
21
+ *
22
+ * @param baseUrl - API base URL (e.g., 'https://api.molroo.io').
23
+ * @param apiKey - API key for authentication.
24
+ * @returns A fully-typed openapi-fetch client instance.
25
+ */
26
+ export function createApiClient(baseUrl, apiKey) {
27
+ const client = createClient({
28
+ baseUrl: baseUrl.replace(/\/$/, ''),
29
+ headers: {
30
+ 'Content-Type': 'application/json',
31
+ 'X-API-Key': apiKey,
32
+ },
33
+ });
34
+ client.use(errorMiddleware);
35
+ return client;
36
+ }
37
+ /**
38
+ * Unwrap the `{ result: T }` envelope from API responses.
39
+ *
40
+ * Many API endpoints return `ResultWrapper` (typed as `{ result?: unknown }`)
41
+ * in the OpenAPI spec. This helper extracts the `result` field and casts it
42
+ * to the expected type.
43
+ *
44
+ * For endpoints with properly-typed response schemas, use `data.result` directly.
45
+ */
46
+ export function unwrap(data) {
47
+ return (data?.result ?? {});
48
+ }
@@ -0,0 +1,8 @@
1
+ import type { PersonaConfigData } from '../types.js';
2
+ export declare const DEFAULT_PERSONA: PersonaConfigData;
3
+ /**
4
+ * Merge user-provided persona config with defaults.
5
+ * User values take precedence; defaults fill missing fields.
6
+ */
7
+ export declare function withDefaults(config?: Partial<PersonaConfigData>): PersonaConfigData;
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/defaults/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAErD,eAAO,MAAM,eAAe,EAAE,iBAAkC,CAAC;AAEjE;;;GAGG;AACH,wBAAgB,YAAY,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,GAAG,iBAAiB,CAenF"}
@@ -0,0 +1,23 @@
1
+ import defaultPersona from './persona.json';
2
+ export const DEFAULT_PERSONA = defaultPersona;
3
+ /**
4
+ * Merge user-provided persona config with defaults.
5
+ * User values take precedence; defaults fill missing fields.
6
+ */
7
+ export function withDefaults(config) {
8
+ if (!config)
9
+ return { ...DEFAULT_PERSONA };
10
+ return {
11
+ ...DEFAULT_PERSONA,
12
+ ...config,
13
+ personality: {
14
+ ...DEFAULT_PERSONA.personality,
15
+ ...config.personality,
16
+ },
17
+ identity: {
18
+ ...DEFAULT_PERSONA.identity,
19
+ ...config.identity,
20
+ },
21
+ goals: config.goals ?? DEFAULT_PERSONA.goals,
22
+ };
23
+ }
@@ -0,0 +1,17 @@
1
+ {
2
+ "personality": {
3
+ "O": 0.5,
4
+ "C": 0.5,
5
+ "E": 0.5,
6
+ "A": 0.5,
7
+ "N": 0.5,
8
+ "H": 0.5
9
+ },
10
+ "identity": {
11
+ "name": "Persona",
12
+ "role": "A person with a neutral, balanced personality.",
13
+ "speakingStyle": "Natural, conversational tone.",
14
+ "coreValues": ["honesty", "kindness"]
15
+ },
16
+ "goals": []
17
+ }
@@ -0,0 +1,15 @@
1
+ import type { EmbeddingAdapter } from '../memory/types';
2
+ export interface AiBinding {
3
+ run(model: string, input: {
4
+ text: string[];
5
+ }): Promise<{
6
+ data: number[][];
7
+ }>;
8
+ }
9
+ export interface CloudflareAIEmbeddingOptions {
10
+ ai: AiBinding;
11
+ model?: string;
12
+ dimension?: number;
13
+ }
14
+ export declare function cloudflareAIEmbedding(options: CloudflareAIEmbeddingOptions): EmbeddingAdapter;
15
+ //# sourceMappingURL=cloudflare.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cloudflare.d.ts","sourceRoot":"","sources":["../../../src/embedding/cloudflare.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAExD,MAAM,WAAW,SAAS;IACxB,GAAG,CACD,KAAK,EAAE,MAAM,EACb,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,EAAE,CAAA;KAAE,GACxB,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,EAAE,EAAE,CAAA;KAAE,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,4BAA4B;IAC3C,EAAE,EAAE,SAAS,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAKD,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,4BAA4B,GACpC,gBAAgB,CAWlB"}
@@ -0,0 +1,13 @@
1
+ const DEFAULT_MODEL = '@cf/baai/bge-base-en-v1.5';
2
+ const DEFAULT_DIMENSION = 768;
3
+ export function cloudflareAIEmbedding(options) {
4
+ const model = options.model ?? DEFAULT_MODEL;
5
+ const dimension = options.dimension ?? DEFAULT_DIMENSION;
6
+ return {
7
+ dimension,
8
+ async embed(text) {
9
+ const result = await options.ai.run(model, { text: [text] });
10
+ return result.data[0];
11
+ },
12
+ };
13
+ }
@@ -0,0 +1,8 @@
1
+ import type { EmbeddingAdapter } from '../memory/types';
2
+ export interface CohereEmbeddingOptions {
3
+ apiKey: string;
4
+ model?: string;
5
+ inputType?: 'search_document' | 'search_query';
6
+ }
7
+ export declare function cohereEmbedding(options: CohereEmbeddingOptions): EmbeddingAdapter;
8
+ //# sourceMappingURL=cohere.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cohere.d.ts","sourceRoot":"","sources":["../../../src/embedding/cohere.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAExD,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,iBAAiB,GAAG,cAAc,CAAC;CAChD;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,sBAAsB,GAAG,gBAAgB,CA4BjF"}
@@ -0,0 +1,28 @@
1
+ export function cohereEmbedding(options) {
2
+ const model = options.model ?? 'embed-english-v3.0';
3
+ const inputType = options.inputType ?? 'search_document';
4
+ const dimension = model.includes('v3') ? 1024 : 768;
5
+ return {
6
+ dimension,
7
+ embed: async (text) => {
8
+ const res = await fetch('https://api.cohere.com/v2/embed', {
9
+ method: 'POST',
10
+ headers: {
11
+ 'Authorization': `Bearer ${options.apiKey}`,
12
+ 'Content-Type': 'application/json',
13
+ },
14
+ body: JSON.stringify({
15
+ model,
16
+ texts: [text],
17
+ input_type: inputType,
18
+ embedding_types: ['float'],
19
+ }),
20
+ });
21
+ if (!res.ok) {
22
+ throw new Error(`Cohere embedding failed: ${res.status} ${res.statusText}`);
23
+ }
24
+ const json = await res.json();
25
+ return json.embeddings.float[0];
26
+ },
27
+ };
28
+ }
@@ -0,0 +1,9 @@
1
+ export { openaiEmbedding } from './openai';
2
+ export { cohereEmbedding } from './cohere';
3
+ export { createLocalEmbedder } from './local';
4
+ export { cloudflareAIEmbedding } from './cloudflare';
5
+ export type { OpenAIEmbeddingOptions } from './openai';
6
+ export type { CohereEmbeddingOptions } from './cohere';
7
+ export type { LocalEmbedderOptions } from './local';
8
+ export type { CloudflareAIEmbeddingOptions, AiBinding } from './cloudflare';
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/embedding/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAC9C,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AACrD,YAAY,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;AACvD,YAAY,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;AACvD,YAAY,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AACpD,YAAY,EAAE,4BAA4B,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,4 @@
1
+ export { openaiEmbedding } from './openai';
2
+ export { cohereEmbedding } from './cohere';
3
+ export { createLocalEmbedder } from './local';
4
+ export { cloudflareAIEmbedding } from './cloudflare';
@@ -0,0 +1,6 @@
1
+ import type { EmbeddingAdapter } from '../memory/types';
2
+ export interface LocalEmbedderOptions {
3
+ model?: string;
4
+ }
5
+ export declare function createLocalEmbedder(options?: LocalEmbedderOptions): Promise<EmbeddingAdapter>;
6
+ //# sourceMappingURL=local.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local.d.ts","sourceRoot":"","sources":["../../../src/embedding/local.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAExD,MAAM,WAAW,oBAAoB;IACnC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAsB,mBAAmB,CACvC,OAAO,CAAC,EAAE,oBAAoB,GAC7B,OAAO,CAAC,gBAAgB,CAAC,CA4B3B"}
@@ -0,0 +1,25 @@
1
+ export async function createLocalEmbedder(options) {
2
+ const modelId = options?.model ?? 'Xenova/all-MiniLM-L6-v2';
3
+ let pipeline;
4
+ try {
5
+ const transformers = await Function('return import("@huggingface/transformers")')();
6
+ pipeline = transformers.pipeline;
7
+ }
8
+ catch {
9
+ throw new Error('@huggingface/transformers is required for local embeddings. ' +
10
+ 'Install it: npm install @huggingface/transformers');
11
+ }
12
+ const extractor = await pipeline('feature-extraction', modelId);
13
+ const probe = await extractor('test', { pooling: 'mean', normalize: true });
14
+ const dimension = probe.data.length;
15
+ return {
16
+ dimension,
17
+ embed: async (text) => {
18
+ const output = await extractor(text, {
19
+ pooling: 'mean',
20
+ normalize: true,
21
+ });
22
+ return Array.from(output.data);
23
+ },
24
+ };
25
+ }
@@ -0,0 +1,9 @@
1
+ import type { EmbeddingAdapter } from '../memory/types';
2
+ export interface OpenAIEmbeddingOptions {
3
+ apiKey: string;
4
+ model?: string;
5
+ dimension?: number;
6
+ baseUrl?: string;
7
+ }
8
+ export declare function openaiEmbedding(options: OpenAIEmbeddingOptions): EmbeddingAdapter;
9
+ //# sourceMappingURL=openai.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../../src/embedding/openai.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAExD,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,sBAAsB,GAAG,gBAAgB,CAuBjF"}
@@ -0,0 +1,23 @@
1
+ export function openaiEmbedding(options) {
2
+ const model = options.model ?? 'text-embedding-3-small';
3
+ const dimension = options.dimension ?? 1536;
4
+ const baseUrl = options.baseUrl ?? 'https://api.openai.com';
5
+ return {
6
+ dimension,
7
+ embed: async (text) => {
8
+ const res = await fetch(`${baseUrl}/v1/embeddings`, {
9
+ method: 'POST',
10
+ headers: {
11
+ 'Authorization': `Bearer ${options.apiKey}`,
12
+ 'Content-Type': 'application/json',
13
+ },
14
+ body: JSON.stringify({ model, input: text, dimensions: dimension }),
15
+ });
16
+ if (!res.ok) {
17
+ throw new Error(`OpenAI embedding failed: ${res.status} ${res.statusText}`);
18
+ }
19
+ const json = await res.json();
20
+ return json.data[0].embedding;
21
+ },
22
+ };
23
+ }
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Error thrown when the molroo API returns a non-OK response.
3
+ *
4
+ * Contains the API error code and HTTP status for programmatic handling.
5
+ */
6
+ export declare class MolrooApiError extends Error {
7
+ /** Machine-readable error code (e.g., 'ENTITY_NOT_FOUND', 'UNAUTHORIZED'). */
8
+ code: string;
9
+ /** HTTP status code. */
10
+ status: number;
11
+ constructor(message: string,
12
+ /** Machine-readable error code (e.g., 'ENTITY_NOT_FOUND', 'UNAUTHORIZED'). */
13
+ code: string,
14
+ /** HTTP status code. */
15
+ status: number);
16
+ }
17
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/errors.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,qBAAa,cAAe,SAAQ,KAAK;IAGrC,8EAA8E;IACvE,IAAI,EAAE,MAAM;IACnB,wBAAwB;IACjB,MAAM,EAAE,MAAM;gBAJrB,OAAO,EAAE,MAAM;IACf,8EAA8E;IACvE,IAAI,EAAE,MAAM;IACnB,wBAAwB;IACjB,MAAM,EAAE,MAAM;CAKxB"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Error thrown when the molroo API returns a non-OK response.
3
+ *
4
+ * Contains the API error code and HTTP status for programmatic handling.
5
+ */
6
+ export class MolrooApiError extends Error {
7
+ constructor(message,
8
+ /** Machine-readable error code (e.g., 'ENTITY_NOT_FOUND', 'UNAUTHORIZED'). */
9
+ code,
10
+ /** HTTP status code. */
11
+ status) {
12
+ super(message);
13
+ this.code = code;
14
+ this.status = status;
15
+ this.name = 'MolrooApiError';
16
+ }
17
+ }
@@ -0,0 +1,25 @@
1
+ import type { EventAdapter, SDKEvent } from './types';
2
+ export interface ConsoleEventAdapterOptions {
3
+ /** Prefix for log lines. Default: '[molroo]'. */
4
+ prefix?: string;
5
+ /** Only emit these event types. Empty = all. */
6
+ filter?: string[];
7
+ /** Output format. Default: 'human'. */
8
+ format?: 'human' | 'json';
9
+ /** Custom logger function. Default: console.log. */
10
+ logger?: (message: string) => void;
11
+ }
12
+ /**
13
+ * Console-based EventAdapter for development/debugging.
14
+ * Logs events to console (or a custom logger function).
15
+ */
16
+ export declare class ConsoleEventAdapter implements EventAdapter {
17
+ private prefix;
18
+ private filter;
19
+ private format;
20
+ private logger;
21
+ constructor(options?: ConsoleEventAdapterOptions);
22
+ emit(event: SDKEvent): Promise<void>;
23
+ emitBatch(events: SDKEvent[]): Promise<void>;
24
+ }
25
+ //# sourceMappingURL=console.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"console.d.ts","sourceRoot":"","sources":["../../../src/events/console.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAEtD,MAAM,WAAW,0BAA0B;IACzC,iDAAiD;IACjD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gDAAgD;IAChD,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,uCAAuC;IACvC,MAAM,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAC1B,oDAAoD;IACpD,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACpC;AAED;;;GAGG;AACH,qBAAa,mBAAoB,YAAW,YAAY;IACtD,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,MAAM,CAAmB;IACjC,OAAO,CAAC,MAAM,CAA4B;gBAE9B,OAAO,CAAC,EAAE,0BAA0B;IAO1C,IAAI,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAapC,SAAS,CAAC,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;CAKnD"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Console-based EventAdapter for development/debugging.
3
+ * Logs events to console (or a custom logger function).
4
+ */
5
+ export class ConsoleEventAdapter {
6
+ constructor(options) {
7
+ this.prefix = options?.prefix ?? '[molroo]';
8
+ this.filter = new Set(options?.filter ?? []);
9
+ this.format = options?.format ?? 'human';
10
+ this.logger = options?.logger ?? console.log;
11
+ }
12
+ async emit(event) {
13
+ if (this.filter.size > 0 && !this.filter.has(event.type)) {
14
+ return;
15
+ }
16
+ if (this.format === 'json') {
17
+ this.logger(`${this.prefix} ${JSON.stringify(event)}`);
18
+ }
19
+ else {
20
+ const time = new Date(event.timestamp).toISOString();
21
+ this.logger(`${this.prefix} ${time} ${event.type}: ${summarize(event.payload)}`);
22
+ }
23
+ }
24
+ async emitBatch(events) {
25
+ for (const event of events) {
26
+ await this.emit(event);
27
+ }
28
+ }
29
+ }
30
+ function summarize(payload) {
31
+ const keys = Object.keys(payload);
32
+ if (keys.length === 0)
33
+ return '{}';
34
+ if (keys.length <= 3)
35
+ return JSON.stringify(payload);
36
+ return `{${keys.slice(0, 3).join(', ')} + ${keys.length - 3} more}`;
37
+ }
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Event Adapter interface for molroo SDK.
3
+ *
4
+ * Abstracts event emission so consumers can:
5
+ * - Log emotion changes, relationship updates, stage transitions
6
+ * - Send webhooks, push notifications, analytics events
7
+ * - Build reactive UIs that respond to persona state changes
8
+ *
9
+ * Events are derived from API response data (AgentResponse fields).
10
+ * Implementations are provided by the consumer — SDK only defines the interface.
11
+ */
12
+ /** Persona-scoped event types — emitted from persona state changes. */
13
+ export type PersonaEventType = 'emotion_changed' | 'relationship_changed' | 'memory_consolidated' | 'reflection_generated' | 'stage_transition' | 'mask_exposure' | 'goal_changed';
14
+ export type SDKEventType = PersonaEventType;
15
+ export interface SDKEvent {
16
+ type: SDKEventType;
17
+ /** Present for persona-scoped events. Absent for world-scoped events. */
18
+ personaId?: string;
19
+ timestamp: number;
20
+ payload: Record<string, unknown>;
21
+ }
22
+ export interface EventAdapter {
23
+ /** Emit a single event. */
24
+ emit(event: SDKEvent): Promise<void>;
25
+ /** Emit multiple events in batch. Optional — falls back to sequential emit(). */
26
+ emitBatch?(events: SDKEvent[]): Promise<void>;
27
+ }
28
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/events/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,uEAAuE;AACvE,MAAM,MAAM,gBAAgB,GACxB,iBAAiB,GACjB,sBAAsB,GACtB,qBAAqB,GACrB,sBAAsB,GACtB,kBAAkB,GAClB,eAAe,GACf,cAAc,CAAC;AAEnB,MAAM,MAAM,YAAY,GAAG,gBAAgB,CAAC;AAE5C,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,YAAY,CAAC;IACnB,yEAAyE;IACzE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,YAAY;IAC3B,2BAA2B;IAC3B,IAAI,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAErC,iFAAiF;IACjF,SAAS,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/C"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Event Adapter interface for molroo SDK.
3
+ *
4
+ * Abstracts event emission so consumers can:
5
+ * - Log emotion changes, relationship updates, stage transitions
6
+ * - Send webhooks, push notifications, analytics events
7
+ * - Build reactive UIs that respond to persona state changes
8
+ *
9
+ * Events are derived from API response data (AgentResponse fields).
10
+ * Implementations are provided by the consumer — SDK only defines the interface.
11
+ */
12
+ export {};
@@ -0,0 +1,30 @@
1
+ import type { EventAdapter, SDKEvent } from './types';
2
+ export interface WebhookEventAdapterOptions {
3
+ /** Webhook endpoint URL. */
4
+ url: string;
5
+ /** HMAC secret for signing payloads. Optional. */
6
+ secret?: string;
7
+ /** Max retry attempts on server errors. Default: 2. */
8
+ maxRetries?: number;
9
+ /** Request timeout in ms. Default: 5000. */
10
+ timeoutMs?: number;
11
+ /** Additional HTTP headers. */
12
+ headers?: Record<string, string>;
13
+ }
14
+ /**
15
+ * Webhook-based EventAdapter for production event delivery.
16
+ * Sends events as POST requests with optional HMAC signing and retry.
17
+ */
18
+ export declare class WebhookEventAdapter implements EventAdapter {
19
+ private url;
20
+ private secret?;
21
+ private maxRetries;
22
+ private timeoutMs;
23
+ private headers;
24
+ constructor(options: WebhookEventAdapterOptions);
25
+ emit(event: SDKEvent): Promise<void>;
26
+ emitBatch(events: SDKEvent[]): Promise<void>;
27
+ private post;
28
+ private sign;
29
+ }
30
+ //# sourceMappingURL=webhook.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webhook.d.ts","sourceRoot":"","sources":["../../../src/events/webhook.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAGtD,MAAM,WAAW,0BAA0B;IACzC,4BAA4B;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,kDAAkD;IAClD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,uDAAuD;IACvD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,4CAA4C;IAC5C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,+BAA+B;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AAED;;;GAGG;AACH,qBAAa,mBAAoB,YAAW,YAAY;IACtD,OAAO,CAAC,GAAG,CAAS;IACpB,OAAO,CAAC,MAAM,CAAC,CAAS;IACxB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,OAAO,CAAyB;gBAE5B,OAAO,EAAE,0BAA0B;IAQzC,IAAI,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAIpC,SAAS,CAAC,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;YAIpC,IAAI;IAwDlB,OAAO,CAAC,IAAI;CAIb"}