@t0ken.ai/memoryx-openclaw-plugin 2.2.34 → 2.2.36

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.
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAkDH,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,wBAs0BE;AAEF,OAAO,EAAE,aAAa,EAAE,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAkDH,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,wBAuwBE;AAEF,OAAO,EAAE,aAAa,EAAE,CAAC"}
package/dist/index.js CHANGED
@@ -26,7 +26,7 @@ import * as fs from "fs";
26
26
  import * as path from "path";
27
27
  import * as os from "os";
28
28
  // 插件版本号 - 由 prebuild 脚本自动从 package.json 同步
29
- const PLUGIN_VERSION = "2.2.34";
29
+ const PLUGIN_VERSION = "2.2.36";
30
30
  const DEFAULT_API_BASE = "https://t0ken.ai/api";
31
31
  const PLUGIN_DIR = path.join(os.homedir(), ".openclaw", "extensions", "memoryx-openclaw-plugin");
32
32
  let logStream = null;
@@ -743,101 +743,27 @@ export default {
743
743
  catch (e) {
744
744
  log(`[Proxy] Failed to extract credentials: ${e}`);
745
745
  }
746
- // OpenClaw config 动态提取模型列表
747
- // OpenClaw provider 下查找 model,所以 model id 不需要 provider 前缀
748
- function extractModelsFromConfig(config) {
749
- const modelsMap = new Map();
750
- // 默认虚拟模型 - 类似 SlimClaw 的 auto
751
- modelsMap.set('auto', {
752
- id: 'auto',
753
- name: 'MemoryX Auto Router',
754
- reasoning: true,
755
- input: ['text', 'image'],
756
- cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
757
- contextWindow: 200000,
758
- maxTokens: 8192,
759
- });
760
- // 从配置中提取所有模型
761
- if (config?.models?.providers) {
762
- for (const [providerId, providerConfig] of Object.entries(config.models.providers)) {
763
- const pc = providerConfig;
764
- log(`[Proxy] Checking provider ${providerId} for models...`);
765
- // 检查多种可能的模型配置格式
766
- const modelSources = [
767
- pc.models, // array format: models: ["glm-5", "glm-4.7"]
768
- pc.modelIds, // alternative name
769
- pc.model?.models, // nested format
770
- ];
771
- for (const modelList of modelSources) {
772
- if (modelList && Array.isArray(modelList)) {
773
- modelList.forEach((modelId) => {
774
- if (typeof modelId === 'string' && !modelsMap.has(modelId)) {
775
- modelsMap.set(modelId, {
776
- id: modelId,
777
- name: `${modelId} (via MemoryX)`,
778
- reasoning: true,
779
- input: ['text'],
780
- cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
781
- contextWindow: 128000,
782
- maxTokens: 8192,
783
- });
784
- log(`[Proxy] Added model: ${modelId} from provider ${providerId}`);
785
- }
786
- });
787
- }
788
- }
789
- // 检查 object format: models: { "glm-5": {...}, "glm-4.7": {...} }
790
- if (pc.models && typeof pc.models === 'object' && !Array.isArray(pc.models)) {
791
- for (const modelId of Object.keys(pc.models)) {
792
- if (!modelsMap.has(modelId)) {
793
- modelsMap.set(modelId, {
794
- id: modelId,
795
- name: `${modelId} (via MemoryX)`,
796
- reasoning: true,
797
- input: ['text'],
798
- cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
799
- contextWindow: 128000,
800
- maxTokens: 8192,
801
- });
802
- log(`[Proxy] Added model: ${modelId} from provider ${providerId} (object format)`);
803
- }
804
- }
805
- }
806
- }
807
- }
808
- // 添加常用模型(硬编码备用)
809
- const fallbackModels = [
810
- 'gpt-4o', 'gpt-4o-mini', 'gpt-4-turbo', 'gpt-3.5-turbo',
811
- 'claude-sonnet-4-20250514', 'claude-3-5-sonnet-20241022', 'claude-3-haiku-20240307',
812
- 'glm-4', 'glm-4-plus', 'glm-4-air', 'glm-4.7', 'glm-5',
813
- ];
814
- for (const modelId of fallbackModels) {
815
- if (!modelsMap.has(modelId)) {
816
- modelsMap.set(modelId, {
817
- id: modelId,
818
- name: `${modelId} (via MemoryX)`,
819
- reasoning: true,
820
- input: ['text'],
821
- cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
822
- contextWindow: 128000,
823
- maxTokens: 8192,
824
- });
825
- log(`[Proxy] Added fallback model: ${modelId}`);
826
- }
827
- }
828
- const models = Array.from(modelsMap.values());
829
- log(`[Proxy] Total models extracted: ${models.length}`);
830
- return models;
831
- }
832
- // 注册 Proxy Provider
746
+ // 简化方案:只注册一个虚拟模型 "auto"
747
+ // before_model_resolve 拦截所有请求,改为使用 memoryx-proxy/auto
748
+ // sendMessage 用原始模型去代理,用户无感知
749
+ const VIRTUAL_MODEL = {
750
+ id: 'auto',
751
+ name: 'MemoryX Auto Router',
752
+ reasoning: true,
753
+ input: ['text', 'image'],
754
+ cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
755
+ contextWindow: 200000,
756
+ maxTokens: 8192,
757
+ };
758
+ log(`[Proxy] Using simplified virtual model: auto`);
759
+ // 注册 Proxy Provider - 只注册一个虚拟模型 "auto"
833
760
  api.registerProvider({
834
761
  id: 'memoryx-proxy',
835
762
  name: 'MemoryX Proxy Provider',
836
- // 声明支持的模型 - 从配置动态提取
837
763
  models: {
838
764
  baseUrl: 'http://memoryx-proxy.local',
839
765
  api: 'anthropic-messages',
840
- models: extractModelsFromConfig(api.config),
766
+ models: [VIRTUAL_MODEL], // 只注册 auto
841
767
  },
842
768
  async sendMessage(params) {
843
769
  const requestId = `req-${Date.now()}`;
@@ -910,13 +836,12 @@ export default {
910
836
  log(`[Proxy] Memory injection failed: ${e}`);
911
837
  }
912
838
  // ========== 转发请求 ==========
913
- // 解析 model ID:去除 memoryx-proxy/ 前缀
914
- let actualModel = params.model || '';
915
- if (actualModel.startsWith('memoryx-proxy/')) {
916
- actualModel = actualModel.substring('memoryx-proxy/'.length);
917
- }
839
+ // 使用原始模型(从 lastRequestInfo 获取,由 before_model_resolve 保存)
840
+ // params.model "auto"(虚拟模型),不能用
841
+ const actualModel = lastRequestInfo.model || params.model || 'claude-sonnet-4-20250514';
918
842
  // 确定目标 provider(从 lastRequestInfo 或原始 provider)
919
843
  const targetProvider = lastRequestInfo.provider || params.provider || 'anthropic';
844
+ log(`\n[Proxy] Using original model from lastRequestInfo: ${lastRequestInfo.model}`);
920
845
  const credentials = providerCredentials.get(targetProvider);
921
846
  if (!credentials) {
922
847
  log(`[Proxy] ❌ No credentials for provider: ${targetProvider}`);
@@ -999,22 +924,37 @@ export default {
999
924
  }
1000
925
  });
1001
926
  api.logger.info('[MemoryX] 🔄 Proxy provider registered: memoryx-proxy');
927
+ // 从 api.config 读取默认 model 和 provider
928
+ // 注意:hook context 不包含 model 信息,只能从 config 读取
929
+ const getDefaultModelAndProvider = () => {
930
+ const agentsDefaults = api.config?.agents?.defaults;
931
+ const model = agentsDefaults?.model?.default || agentsDefaults?.model || 'claude-sonnet-4-20250514';
932
+ const provider = agentsDefaults?.provider?.default || agentsDefaults?.provider || 'anthropic';
933
+ return { model, provider };
934
+ };
1002
935
  // 保存原始请求信息,供 sendMessage 使用
1003
- let lastRequestInfo = {};
936
+ let lastRequestInfo = getDefaultModelAndProvider();
937
+ log(`[Proxy] Default model/provider from config: ${lastRequestInfo.model}/${lastRequestInfo.provider}`);
1004
938
  // 用 before_model_resolve 自动切换到 Proxy Provider
1005
- // 注意:event 只有 prompt 字段,provider 信息在 ctx.messageProvider
939
+ // 关键:同时覆盖 provider model,让 OpenClaw 找到 memoryx-proxy/auto
940
+ // 注意:hook context 没有 model,从 api.config 读取默认值
1006
941
  api.on('before_model_resolve', (event, ctx) => {
1007
942
  log(`\n[before_model_resolve] Intercepting request`);
1008
943
  log(` Prompt Preview: ${event.prompt?.slice(0, 200)}...`);
1009
- log(` Context Provider: ${ctx.messageProvider}`);
944
+ log(` Context messageProvider: ${ctx.messageProvider}`);
1010
945
  log(` Context AgentId: ${ctx.agentId}`);
1011
- // 保存原始信息(从 context 获取)
946
+ // config 获取默认 model/provider(hook context 没有 model)
947
+ const defaults = getDefaultModelAndProvider();
1012
948
  lastRequestInfo = {
1013
- provider: ctx.messageProvider
949
+ model: defaults.model,
950
+ provider: defaults.provider
1014
951
  };
1015
- // 只覆盖 provider,让 OpenClaw 使用原始 model
952
+ log(`[before_model_resolve] Using defaults from config: model=${defaults.model}, provider=${defaults.provider}`);
953
+ // 同时覆盖 provider 和 model
954
+ // 这样 OpenClaw 会找 memoryx-proxy/auto,一定能找到
1016
955
  return {
1017
- providerOverride: 'memoryx-proxy'
956
+ providerOverride: 'memoryx-proxy',
957
+ modelOverride: 'auto'
1018
958
  };
1019
959
  });
1020
960
  api.logger.info('[MemoryX] 🔄 Auto-routing enabled - all requests will go through MemoryX Proxy');
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@t0ken.ai/memoryx-openclaw-plugin",
3
- "version": "2.2.34",
3
+ "version": "2.2.36",
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",