index.js 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. // index.ts
  2. import axios from "axios";
  3. const DEFAULT_BASE_URL = "http://192.168.0.200:8420";
  4. const DEFAULT_TIMEOUT_MS = 10000;
  5. const DEFAULT_KNOWLEDGE_USER_ID = "knowledge_base";
  6. function getBaseUrl(plugin) {
  7. return (plugin?.config?.baseUrl ||
  8. process.env.MEM0_BASE_URL ||
  9. DEFAULT_BASE_URL);
  10. }
  11. function getDefaultUserId(plugin) {
  12. return (plugin?.runtime?.agent?.id ||
  13. globalThis?.openclaw?.agent?.id ||
  14. plugin?.config?.userId ||
  15. "default");
  16. }
  17. function getKnowledgeUserId(plugin) {
  18. return (plugin?.config?.knowledgeUserId ||
  19. process.env.MEM0_KNOWLEDGE_USER_ID ||
  20. DEFAULT_KNOWLEDGE_USER_ID);
  21. }
  22. function http(plugin) {
  23. return axios.create({
  24. baseURL: getBaseUrl(plugin),
  25. timeout: DEFAULT_TIMEOUT_MS,
  26. });
  27. }
  28. export const activate = (plugin) => {
  29. const client = http(plugin);
  30. // write conversational memory
  31. plugin.write = async ({ text, userId }) => {
  32. const finalUserId = userId || getDefaultUserId(plugin);
  33. if (!text)
  34. throw new Error("Missing text for memory write");
  35. const res = await client.post(`/memories`, { text, userId: finalUserId });
  36. return res.data;
  37. };
  38. // search conversational memory
  39. plugin.search = async ({ query, userId }) => {
  40. const finalUserId = userId || getDefaultUserId(plugin);
  41. if (!query)
  42. throw new Error("Missing query for memory search");
  43. const res = await client.post(`/memories/search`, {
  44. query,
  45. userId: finalUserId,
  46. });
  47. return res.data;
  48. };
  49. // search knowledge base
  50. plugin.searchKnowledge = async ({ query, userId }) => {
  51. const finalUserId = userId || getKnowledgeUserId(plugin);
  52. if (!query)
  53. throw new Error("Missing query for knowledge search");
  54. const res = await client.post(`/knowledge/search`, {
  55. query,
  56. userId: finalUserId,
  57. });
  58. return res.data;
  59. };
  60. // write to knowledge base
  61. plugin.writeKnowledge = async ({ text, userId }) => {
  62. const finalUserId = userId || getKnowledgeUserId(plugin);
  63. if (!text)
  64. throw new Error("Missing text for knowledge write");
  65. const res = await client.post(`/knowledge`, { text, userId: finalUserId });
  66. return res.data;
  67. };
  68. // read/recall recent memories (requires /memories/recent on server)
  69. plugin.read = async ({ userId, limit = 5 }) => {
  70. const finalUserId = userId || getDefaultUserId(plugin);
  71. const res = await client.post(`/memories/recent`, {
  72. userId: finalUserId,
  73. limit,
  74. });
  75. return res.data.results || [];
  76. };
  77. };