@t0ken.ai/memoryx-openclaw-plugin 2.2.55 → 2.2.57

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/README.md CHANGED
@@ -168,6 +168,10 @@ Memories are categorized by the server:
168
168
  - Minimum 2 characters per message
169
169
  - Short messages like "ok", "thanks" are skipped
170
170
 
171
+ ## How the proxy works (no virtual model)
172
+
173
+ The plugin does **not** add a virtual model. It redirects your existing provider's request URL to a local Sidecar (port 3335). You keep using your configured model (e.g. `zai/glm-5`); the request is sent to the Sidecar with a header identifying the real provider, then the Sidecar forwards to the MemoryX server with your credentials. No need to add `memoryx-proxy` to config or auth.
174
+
171
175
  ## License
172
176
 
173
177
  MIT
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAmDH,UAAU,YAAY;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,mCAAmC;IACnC,aAAa,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,UAAU,YAAY;IAClB,QAAQ,EAAE,KAAK,CAAC;QACZ,EAAE,EAAE,MAAM,CAAC;QACX,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,EAAE,MAAM,CAAC;QACjB,KAAK,EAAE,MAAM,CAAC;KACjB,CAAC,CAAC;IACH,eAAe,EAAE,KAAK,CAAC;QACnB,EAAE,EAAE,MAAM,CAAC;QACX,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,EAAE,MAAM,CAAC;QACjB,KAAK,EAAE,MAAM,CAAC;KACjB,CAAC,CAAC;IACH,SAAS,EAAE,OAAO,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;CACxB;AAqDD,cAAM,aAAa;IACf,OAAO,CAAC,YAAY,CAA2B;IAC/C,OAAO,CAAC,WAAW,CAAkB;IACrC,OAAO,CAAC,aAAa,CAAkB;gBAE3B,YAAY,CAAC,EAAE,YAAY;IAIjC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAad,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC;IAUpC,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IA6B1D,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,GAAE,MAAU,GAAG,OAAO,CAAC,YAAY,CAAC;IAyC/D,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;IAYhC,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAc1C,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAcvE,IAAI,CAAC,KAAK,GAAE,MAAW,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAiBxC,cAAc,IAAI,OAAO,CAAC;QACnC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;QACtB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;QACvB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;QACzB,WAAW,EAAE,OAAO,CAAC;QACrB,KAAK,CAAC,EAAE,GAAG,CAAC;KACf,CAAC;IAwBW,cAAc,IAAI,OAAO,CAAC;QACnC,OAAO,EAAE,OAAO,CAAC;QACjB,IAAI,CAAC,EAAE;YACH,QAAQ,EAAE,MAAM,CAAC;YACjB,IAAI,EAAE,MAAM,CAAC;YACb,UAAU,EAAE,MAAM,CAAC;YACnB,YAAY,EAAE,MAAM,CAAC;YACrB,iBAAiB,EAAE,MAAM,CAAC;YAC1B,gBAAgB,EAAE,MAAM,CAAC;YACzB,mBAAmB,EAAE,MAAM,CAAC;YAC5B,MAAM,EAAE,MAAM,CAAC;YACf,OAAO,EAAE,MAAM,CAAC;SACnB,CAAC;QACF,KAAK,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;CAcL;;;;;;kBAUiB,GAAG,iBAAiB,YAAY,GAAG,IAAI;;AANzD,wBA6gCE;AAEF,OAAO,EAAE,aAAa,EAAE,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAmDH,UAAU,YAAY;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,mCAAmC;IACnC,aAAa,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,UAAU,YAAY;IAClB,QAAQ,EAAE,KAAK,CAAC;QACZ,EAAE,EAAE,MAAM,CAAC;QACX,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,EAAE,MAAM,CAAC;QACjB,KAAK,EAAE,MAAM,CAAC;KACjB,CAAC,CAAC;IACH,eAAe,EAAE,KAAK,CAAC;QACnB,EAAE,EAAE,MAAM,CAAC;QACX,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,EAAE,MAAM,CAAC;QACjB,KAAK,EAAE,MAAM,CAAC;KACjB,CAAC,CAAC;IACH,SAAS,EAAE,OAAO,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;CACxB;AAqDD,cAAM,aAAa;IACf,OAAO,CAAC,YAAY,CAA2B;IAC/C,OAAO,CAAC,WAAW,CAAkB;IACrC,OAAO,CAAC,aAAa,CAAkB;gBAE3B,YAAY,CAAC,EAAE,YAAY;IAIjC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAad,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC;IAUpC,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IA6B1D,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,GAAE,MAAU,GAAG,OAAO,CAAC,YAAY,CAAC;IAyC/D,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;IAYhC,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAc1C,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAcvE,IAAI,CAAC,KAAK,GAAE,MAAW,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAiBxC,cAAc,IAAI,OAAO,CAAC;QACnC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;QACtB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;QACvB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;QACzB,WAAW,EAAE,OAAO,CAAC;QACrB,KAAK,CAAC,EAAE,GAAG,CAAC;KACf,CAAC;IAwBW,cAAc,IAAI,OAAO,CAAC;QACnC,OAAO,EAAE,OAAO,CAAC;QACjB,IAAI,CAAC,EAAE;YACH,QAAQ,EAAE,MAAM,CAAC;YACjB,IAAI,EAAE,MAAM,CAAC;YACb,UAAU,EAAE,MAAM,CAAC;YACnB,YAAY,EAAE,MAAM,CAAC;YACrB,iBAAiB,EAAE,MAAM,CAAC;YAC1B,gBAAgB,EAAE,MAAM,CAAC;YACzB,mBAAmB,EAAE,MAAM,CAAC;YAC5B,MAAM,EAAE,MAAM,CAAC;YACf,OAAO,EAAE,MAAM,CAAC;SACnB,CAAC;QACF,KAAK,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;CAcL;;;;;;kBAUiB,GAAG,iBAAiB,YAAY,GAAG,IAAI;;AANzD,wBA44BE;AAEF,OAAO,EAAE,aAAa,EAAE,CAAC"}
package/dist/index.js CHANGED
@@ -27,7 +27,7 @@ import * as path from "path";
27
27
  import * as os from "os";
28
28
  import * as http from "http";
29
29
  // 插件版本号 - 由 prebuild 脚本自动从 package.json 同步
30
- const PLUGIN_VERSION = "2.2.55";
30
+ const PLUGIN_VERSION = "2.2.57";
31
31
  const DEFAULT_API_BASE = "https://t0ken.ai/api";
32
32
  const PLUGIN_DIR = path.join(os.homedir(), ".openclaw", "extensions", "memoryx-openclaw-plugin");
33
33
  let logStream = null;
@@ -822,19 +822,6 @@ export default {
822
822
  log(`[Proxy] Found ${providerCredentials.size} providers in config`);
823
823
  const defaultProvider = getDefaultModelAndProvider(providerCredentials);
824
824
  log(`[Proxy] Default: ${defaultProvider.provider}/${defaultProvider.model}`);
825
- // 虚拟模型定义:只使用 id='auto',让 OpenClaw 用 provider+'/'+model.id 得到 fullId 'memoryx-proxy/auto'
826
- // (若用 id='memoryx-proxy/auto',部分实现会拼成 'memoryx-proxy/memoryx-proxy/auto' 导致找不到)
827
- const VIRTUAL_MODEL = {
828
- id: 'auto',
829
- name: 'MemoryX Auto Router',
830
- api: 'openai-completions',
831
- reasoning: true,
832
- input: ['text', 'image'],
833
- cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
834
- contextWindow: 200000,
835
- maxTokens: 16384,
836
- };
837
- const VIRTUAL_MODELS = [VIRTUAL_MODEL];
838
825
  const SIDECAR_PORT = 3335;
839
826
  const PROXY_URL = (pluginConfig?.apiBaseUrl || DEFAULT_API_BASE) + '/openclaw/proxy/chat/completions';
840
827
  class SidecarServer {
@@ -922,13 +909,24 @@ export default {
922
909
  res.end('Invalid JSON');
923
910
  return;
924
911
  }
925
- // 详细日志:请求体的完整内容
926
- log(`[${requestId}] Request body keys: ${Object.keys(openaiRequest).join(', ')}`);
927
- log(`[${requestId}] Model: ${openaiRequest.model}, Stream: ${openaiRequest.stream}`);
928
- log(`[${requestId}] Messages count: ${openaiRequest.messages?.length || 0}`);
929
- if (openaiRequest.system) {
930
- log(`[${requestId}] System prompt: ${openaiRequest.system.substring(0, 100)}...`);
912
+ // 真实 provider:来自请求头(插件把用户配置的 baseUrl 改成了 Sidecar 并带上此头)
913
+ const rawProvider = req.headers['x-memoryx-real-provider'];
914
+ let provider = rawProvider?.trim() || '';
915
+ let model = openaiRequest.model || this.defaultProvider.model;
916
+ if (!provider && model && model.includes('/')) {
917
+ const idx = model.indexOf('/');
918
+ provider = model.slice(0, idx);
919
+ model = model.slice(idx + 1);
920
+ }
921
+ if (!provider || !this.credentials.has(provider)) {
922
+ provider = this.defaultProvider.provider;
923
+ model = model || this.defaultProvider.model;
924
+ }
925
+ if (!model && this.credentials.has(provider)) {
926
+ const creds = this.credentials.get(provider);
927
+ model = creds.models?.[0]?.id || creds.models?.[0]?.name || this.defaultProvider.model;
931
928
  }
929
+ log(`[${requestId}] Model: ${openaiRequest.model}, Stream: ${openaiRequest.stream} → proxy provider=${provider}, model=${model}`);
932
930
  // 获取 SDK 信息(API Key 和 agent_id)
933
931
  const sdk = await getSDK(pluginConfig);
934
932
  const accountInfo = await sdk.getAccountInfo();
@@ -940,7 +938,7 @@ export default {
940
938
  res.end(JSON.stringify({ error: 'MemoryX not initialized' }));
941
939
  return;
942
940
  }
943
- // 构建发送到服务端的请求
941
+ // 构建发送到服务端的请求(使用请求对应的真实 provider/model)
944
942
  const credentialsObj = {};
945
943
  for (const [id, creds] of this.credentials) {
946
944
  credentialsObj[id] = {
@@ -949,23 +947,21 @@ export default {
949
947
  models: creds.models
950
948
  };
951
949
  }
952
- // 提取搜索 query(最后一条用户消息)
953
950
  const messages = openaiRequest.messages || [];
954
951
  const lastUserMsg = [...messages].reverse().find((m) => m.role === 'user');
955
952
  const searchQuery = typeof lastUserMsg?.content === 'string'
956
953
  ? lastUserMsg.content
957
954
  : '';
958
955
  const proxyRequestBody = {
959
- provider: this.defaultProvider.provider,
960
- model: this.defaultProvider.model,
961
- availableProviders: this.availableProviders, // 所有可用 provider 供服务端 fallback
956
+ provider,
957
+ model,
958
+ availableProviders: this.availableProviders,
962
959
  credentials: credentialsObj,
963
960
  body: openaiRequest,
964
- searchQuery: searchQuery,
961
+ searchQuery,
965
962
  agent_id: agentId
966
963
  };
967
- log(`[${requestId}] Forwarding to ${PROXY_URL}`);
968
- log(`[${requestId}] Default: ${this.defaultProvider.provider}/${this.defaultProvider.model}, Available: ${this.availableProviders.map(p => p.provider).join(', ')}`);
964
+ log(`[${requestId}] Forwarding to ${PROXY_URL} (${provider}/${model})`);
969
965
  // 发送到 MemoryX 服务端代理
970
966
  const proxyResponse = await fetch(PROXY_URL, {
971
967
  method: 'POST',
@@ -1040,145 +1036,28 @@ export default {
1040
1036
  }
1041
1037
  });
1042
1038
  // =========================================================================
1043
- // 关键:动态注入 provider 配置到 api.config
1044
- //
1045
- // 部分 OpenClaw 版本中 resolveModel() 只从 cfg.models.providers 查找,
1046
- // 不会使用 registerProvider() 注册的 providers,故此处注入 config。
1047
- // 若虚拟厂商仍不可用,请在 OpenClaw 配置中显式添加:
1048
- // models.providers["memoryx-proxy"]: { baseUrl: "http://localhost:3335/v1", api: "openai-completions", models: [{ id: "auto", name: "MemoryX Auto", ... }] }
1039
+ // 不改虚拟模型:把用户已配置的 provider baseUrl 改成本地 Sidecar,请求头带上真实 provider
1040
+ // 用户继续用 zai/glm-5 等,请求会发到 Sidecar,Sidecar 根据 X-MemoryX-Real-Provider 转发
1049
1041
  // =========================================================================
1050
- // ---------- 日志:写 config 前 ----------
1051
- api.logger.info(`[MemoryX] 📋 [1] Before config write - api.config exists: ${!!api.config}`);
1052
- api.logger.info(`[MemoryX] 📋 [1] Before config write - api.config?.models?.providers keys: ${api.config?.models?.providers ? Object.keys(api.config.models.providers).join(', ') : 'N/A'}`);
1042
+ const sidecarBase = `http://localhost:${SIDECAR_PORT}/v1`;
1043
+ const realProviderHeader = 'X-MemoryX-Real-Provider';
1053
1044
  if (api.config?.models?.providers) {
1054
- for (const [pid, p] of Object.entries(api.config.models.providers)) {
1055
- const models = p?.models;
1056
- const modelIds = models?.map((m) => m?.id ?? m?.name ?? '?').join(', ') ?? 'none';
1057
- api.logger.info(`[MemoryX] 📋 [1] Before config write - provider "${pid}" models: [${modelIds}]`);
1058
- }
1059
- }
1060
- if (api.config?.models?.providers) {
1061
- api.config.models.providers['memoryx-proxy'] = {
1062
- baseUrl: `http://localhost:${SIDECAR_PORT}/v1`,
1063
- api: 'openai-completions',
1064
- models: VIRTUAL_MODELS
1065
- };
1066
- api.logger.info('[MemoryX] ✅ Injected memoryx-proxy into config.models.providers');
1067
- api.logger.info(`[MemoryX] 📋 [2] After config write - providers keys: ${Object.keys(api.config.models.providers).join(', ')}`);
1068
- const mx = api.config.models.providers['memoryx-proxy'];
1069
- if (mx?.models) {
1070
- const ids = mx.models.map((m) => m?.id ?? '?').join(', ');
1071
- api.logger.info(`[MemoryX] 📋 [2] After config write - memoryx-proxy model ids: [${ids}]`);
1072
- }
1073
- }
1074
- else if (api.config) {
1075
- if (!api.config.models) {
1076
- api.config.models = {};
1077
- }
1078
- if (!api.config.models.providers) {
1079
- api.config.models.providers = {};
1045
+ const providers = api.config.models.providers;
1046
+ for (const providerId of providerCredentials.keys()) {
1047
+ if (providerId === 'memoryx-proxy')
1048
+ continue;
1049
+ const p = providers[providerId];
1050
+ if (!p || typeof p !== 'object')
1051
+ continue;
1052
+ p.baseUrl = sidecarBase;
1053
+ if (!p.headers)
1054
+ p.headers = {};
1055
+ p.headers[realProviderHeader] = providerId;
1056
+ log(`[Proxy] Redirected provider "${providerId}" baseUrl → Sidecar, header ${realProviderHeader}=${providerId}`);
1080
1057
  }
1081
- api.config.models.providers['memoryx-proxy'] = {
1082
- baseUrl: `http://localhost:${SIDECAR_PORT}/v1`,
1083
- api: 'openai-completions',
1084
- models: VIRTUAL_MODELS
1085
- };
1086
- api.logger.info('[MemoryX] ✅ Created and injected memoryx-proxy into config.models.providers');
1087
- api.logger.info(`[MemoryX] 📋 [2] After config write - memoryx-proxy model ids: [${VIRTUAL_MODELS.map(m => m.id).join(', ')}]`);
1058
+ api.logger.info(`[MemoryX] Redirected ${providerCredentials.size} provider(s) to Sidecar (no virtual model). Use your configured model as usual.`);
1088
1059
  }
1089
- else {
1090
- api.logger.warn('[MemoryX] ⚠️ api.config not available - resolveModel may fail to find memoryx-proxy');
1091
- }
1092
- // 注入 agents.defaults,使 agent 默认使用 memoryx-proxy/auto(部分实现用 agent 的 model 参与解析/白名单)
1093
- if (api.config) {
1094
- if (!api.config.agents) {
1095
- api.config.agents = {};
1096
- }
1097
- const agents = api.config.agents;
1098
- if (!agents.defaults) {
1099
- agents.defaults = {};
1100
- }
1101
- agents.defaults.provider = 'memoryx-proxy';
1102
- agents.defaults.model = 'auto';
1103
- api.logger.info('[MemoryX] 📋 Injected agents.defaults: provider=memoryx-proxy, model=auto');
1104
- }
1105
- // 注册 Provider - 完全对齐 SlimClaw 格式
1106
- const registeredModelIds = VIRTUAL_MODELS.map(m => m.id).join(', ');
1107
- api.logger.info(`[MemoryX] 📋 [3] Before registerProvider - will register id=memoryx-proxy, model ids: [${registeredModelIds}]`);
1108
- api.registerProvider({
1109
- id: 'memoryx-proxy',
1110
- label: 'MemoryX Proxy Provider',
1111
- aliases: ['mx'],
1112
- envVars: [],
1113
- models: {
1114
- baseUrl: `http://localhost:${SIDECAR_PORT}/v1`,
1115
- api: 'openai-completions',
1116
- models: VIRTUAL_MODELS,
1117
- },
1118
- auth: [{
1119
- id: 'none',
1120
- label: 'No authentication needed (proxy)',
1121
- kind: 'custom',
1122
- run: async () => ({
1123
- profiles: [],
1124
- notes: ['MemoryX proxies through configured providers']
1125
- }),
1126
- }],
1127
- });
1128
- api.logger.info(`[MemoryX] 📋 [3] After registerProvider - registered memoryx-proxy with models: [${registeredModelIds}]`);
1129
- // 延迟再读一次 config,检查是否被后续逻辑覆盖
1130
- setImmediate(() => {
1131
- api.logger.info(`[MemoryX] 📋 [4] setImmediate(after register) - api.config?.models?.providers keys: ${api.config?.models?.providers ? Object.keys(api.config.models.providers).join(', ') : 'N/A'}`);
1132
- if (api.config?.models?.providers) {
1133
- const mx = api.config.models.providers['memoryx-proxy'];
1134
- if (mx) {
1135
- const ids = mx.models?.map((m) => m?.id ?? '?').join(', ') ?? 'none';
1136
- api.logger.info(`[MemoryX] 📋 [4] setImmediate - memoryx-proxy still present, model ids: [${ids}]`);
1137
- }
1138
- else {
1139
- api.logger.warn('[MemoryX] 📋 [4] setImmediate - memoryx-proxy MISSING from config (may have been overwritten)');
1140
- }
1141
- for (const [pid, p] of Object.entries(api.config.models.providers)) {
1142
- const models = p?.models;
1143
- const modelIds = models?.map((m) => m?.id ?? '?').join(', ') ?? 'none';
1144
- api.logger.info(`[MemoryX] 📋 [4] setImmediate - provider "${pid}" models: [${modelIds}]`);
1145
- }
1146
- }
1147
- });
1148
- setTimeout(() => {
1149
- api.logger.info(`[MemoryX] 📋 [5] setTimeout(500ms) - api.config?.models?.providers keys: ${api.config?.models?.providers ? Object.keys(api.config.models.providers).join(', ') : 'N/A'}`);
1150
- if (api.config?.models?.providers) {
1151
- const mx = api.config.models.providers['memoryx-proxy'];
1152
- if (mx) {
1153
- const ids = mx.models?.map((m) => m?.id ?? '?').join(', ') ?? 'none';
1154
- api.logger.info(`[MemoryX] 📋 [5] setTimeout(500ms) - memoryx-proxy still present, model ids: [${ids}]`);
1155
- }
1156
- else {
1157
- api.logger.warn('[MemoryX] 📋 [5] setTimeout(500ms) - memoryx-proxy MISSING (overwritten after load)');
1158
- }
1159
- }
1160
- }, 500);
1161
- // before_model_resolve 钩子 - 自动拦截所有请求
1162
- api.on('before_model_resolve', (event, ctx) => {
1163
- const originalModel = event.model || 'unknown';
1164
- const eventKeys = event && typeof event === 'object' ? Object.keys(event).join(', ') : 'n/a';
1165
- api.logger.info(`[MemoryX] 📋 [before_model_resolve] event keys: ${eventKeys} | original model: ${originalModel} → returning providerOverride=memoryx-proxy, modelOverride=auto`);
1166
- log(`[before_model_resolve] Intercepting: ${originalModel} → memoryx-proxy/auto`);
1167
- return {
1168
- providerOverride: 'memoryx-proxy',
1169
- modelOverride: 'auto'
1170
- };
1171
- });
1172
- // resolve 之后:在 llm_input 打日志(此处应有已解析的 model/provider)
1173
- api.on('llm_input', (event, ctx) => {
1174
- const keys = event && typeof event === 'object' ? Object.keys(event).join(', ') : 'n/a';
1175
- const model = event?.model ?? event?.resolvedModel ?? 'undefined';
1176
- const provider = event?.provider ?? event?.resolvedProvider ?? 'undefined';
1177
- api.logger.info(`[MemoryX] 📋 [after resolve? llm_input] event keys: ${keys} | model: ${model} | provider: ${provider}`);
1178
- log(`[llm_input] model=${model} provider=${provider}`);
1179
- });
1180
- api.logger.info('[MemoryX] 🔄 Auto-intercept enabled - ALL requests go through MemoryX Proxy');
1181
- api.logger.info(`[MemoryX] ✅ Plugin v${PLUGIN_VERSION} ready! Your conversations will be remembered automatically.`);
1060
+ api.logger.info(`[MemoryX] ✅ Plugin v${PLUGIN_VERSION} ready! Requests go through MemoryX proxy with your configured model.`);
1182
1061
  // Async check and show portal link after SDK initializes
1183
1062
  setImmediate(async () => {
1184
1063
  try {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "id": "memoryx-openclaw-plugin",
3
3
  "name": "MemoryX Real-time Plugin",
4
- "version": "2.2.55",
4
+ "version": "2.2.57",
5
5
  "description": "Real-time memory capture and recall for OpenClaw",
6
6
  "kind": "memory",
7
7
  "main": "./dist/index.js",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@t0ken.ai/memoryx-openclaw-plugin",
3
- "version": "2.2.55",
3
+ "version": "2.2.57",
4
4
  "description": "MemoryX real-time memory capture and recall plugin for OpenClaw (powered by @t0ken.ai/memoryx-sdk)",
5
5
  "type": "module",
6
6
  "author": "MemoryX Team",