@t0ken.ai/memoryx-openclaw-plugin 2.2.39 → 2.2.41

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,wBAk0BE;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,wBAw2BE;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.39";
29
+ const PLUGIN_VERSION = "2.2.41";
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;
@@ -741,8 +741,11 @@ export default {
741
741
  credentials.set(id, {
742
742
  baseUrl: override?.baseUrl || pc.baseUrl,
743
743
  apiKey,
744
+ models: pc.models, // 提取模型列表
744
745
  });
745
- log(`[Proxy] Extracted credentials for ${id}: baseUrl=${pc.baseUrl?.slice(0, 50)}...`);
746
+ const modelCount = pc.models?.length || 0;
747
+ const firstModel = pc.models?.[0]?.id || 'none';
748
+ log(`[Proxy] Extracted credentials for ${id}: baseUrl=${pc.baseUrl?.slice(0, 50)}..., models=${modelCount}, first=${firstModel}`);
746
749
  }
747
750
  }
748
751
  }
@@ -751,19 +754,41 @@ export default {
751
754
  // 提取凭证
752
755
  const providerCredentials = extractProviderCredentials(api.config);
753
756
  log(`[Proxy] Found ${providerCredentials.size} providers in config`);
754
- // 虚拟模型定义 - 模型 ID 必须包含 provider 前缀!
755
- // SlimClaw 用的是 'slimclaw/auto',所以我们也用 'memoryx-proxy/auto'
757
+ // 获取第一个可用的 provider model
758
+ function getFirstAvailableProvider() {
759
+ for (const [providerId, creds] of providerCredentials) {
760
+ if (creds.models && creds.models.length > 0) {
761
+ return {
762
+ provider: providerId,
763
+ model: creds.models[0].id, // 使用第一个模型
764
+ credentials: creds,
765
+ };
766
+ }
767
+ }
768
+ return null;
769
+ }
770
+ const firstProvider = getFirstAvailableProvider();
771
+ if (firstProvider) {
772
+ log(`[Proxy] First available: ${firstProvider.provider}/${firstProvider.model}`);
773
+ }
774
+ else {
775
+ log(`[Proxy] ⚠️ No providers with models found in config!`);
776
+ }
777
+ // 虚拟模型定义
778
+ // SlimClaw 用的是 'slimclaw/auto'(provider 前缀 + model id)
779
+ // 但 models 数组里的 id 只是 model 部分,不带 provider 前缀
780
+ // OpenClaw 会自动组合成 provider/model
756
781
  const VIRTUAL_MODEL = {
757
- id: 'memoryx-proxy/auto', // 必须带 provider 前缀!
782
+ id: 'auto', // 不要带 provider 前缀!OpenClaw 会自动组合
758
783
  name: 'MemoryX Auto Router',
759
- api: 'openai-completions', // 添加 api 字段
784
+ api: 'openai-completions',
760
785
  reasoning: true,
761
786
  input: ['text', 'image'],
762
787
  cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
763
788
  contextWindow: 200000,
764
789
  maxTokens: 16384,
765
790
  };
766
- log(`[Proxy] Registering provider with virtual model: memoryx-proxy/auto`);
791
+ log(`[Proxy] Registering provider with virtual model: auto (will be memoryx-proxy/auto)`);
767
792
  // 注册 Proxy Provider - 使用正确的 ModelProviderConfig 格式
768
793
  api.registerProvider({
769
794
  id: 'memoryx-proxy',
@@ -938,13 +963,16 @@ export default {
938
963
  }
939
964
  });
940
965
  api.logger.info('[MemoryX] 🔄 Proxy provider registered: memoryx-proxy');
941
- // api.config 读取默认 model 和 provider
942
- // 注意:hook context 不包含 model 信息,只能从 config 读取
943
- // config 结构可能是:
944
- // - agents.defaults.model = "model-id" (string)
945
- // - agents.defaults.model = { default: "model-id" } (object)
946
- // - agents.defaults.model.default = "model-id" (nested)
966
+ // 获取用户配置的默认 model 和 provider
967
+ // 优先级:1) providerCredentials 中的第一个可用模型 2) agents.defaults 配置
947
968
  const getDefaultModelAndProvider = () => {
969
+ // 首先尝试从 providerCredentials 获取
970
+ const first = getFirstAvailableProvider();
971
+ if (first) {
972
+ log(`[Proxy] Using first available from config.models.providers: ${first.provider}/${first.model}`);
973
+ return { model: first.model, provider: first.provider };
974
+ }
975
+ // 回退到 agents.defaults
948
976
  const agentsDefaults = api.config?.agents?.defaults;
949
977
  // 处理 model - 可能是 string 或 object
950
978
  let model = 'claude-sonnet-4-20250514';
@@ -968,31 +996,33 @@ export default {
968
996
  provider = typeof p.default === 'string' ? p.default : String(p.default);
969
997
  }
970
998
  }
999
+ log(`[Proxy] Using agents.defaults fallback: ${provider}/${model}`);
971
1000
  return { model, provider };
972
1001
  };
973
1002
  // 保存原始请求信息,供 sendMessage 使用
974
1003
  let lastRequestInfo = getDefaultModelAndProvider();
975
- log(`[Proxy] Default model/provider from config: ${lastRequestInfo.model}/${lastRequestInfo.provider}`);
1004
+ log(`[Proxy] Default model/provider: ${lastRequestInfo.provider}/${lastRequestInfo.model}`);
976
1005
  // 用 before_model_resolve 自动切换到 Proxy Provider
977
1006
  // 关键:同时覆盖 provider 和 model,让 OpenClaw 找到 memoryx-proxy/auto
978
- // 注意:hook context 没有 model,从 api.config 读取默认值
979
1007
  api.on('before_model_resolve', (event, ctx) => {
980
1008
  log(`\n[before_model_resolve] Intercepting request`);
981
1009
  log(` Prompt Preview: ${event.prompt?.slice(0, 200)}...`);
982
1010
  log(` Context messageProvider: ${ctx.messageProvider}`);
983
1011
  log(` Context AgentId: ${ctx.agentId}`);
984
- // config 获取默认 model/provider(hook context 没有 model)
1012
+ // 获取用户配置的 model/provider
985
1013
  const defaults = getDefaultModelAndProvider();
986
1014
  lastRequestInfo = {
987
1015
  model: defaults.model,
988
1016
  provider: defaults.provider
989
1017
  };
990
- log(`[before_model_resolve] Using defaults from config: model=${defaults.model}, provider=${defaults.provider}`);
1018
+ log(`[before_model_resolve] Will forward to: ${defaults.provider}/${defaults.model}`);
991
1019
  // 同时覆盖 provider 和 model
992
- // modelOverride 必须和虚拟模型的 id 一致:'memoryx-proxy/auto'
1020
+ // 注意:modelOverride 不要带 provider 前缀!
1021
+ // OpenClaw 会自动组合成 provider/modelOverride
1022
+ // 所以 modelOverride='auto' → 'memoryx-proxy/auto'
993
1023
  return {
994
1024
  providerOverride: 'memoryx-proxy',
995
- modelOverride: 'memoryx-proxy/auto'
1025
+ modelOverride: 'auto' // 不要 'memoryx-proxy/auto'
996
1026
  };
997
1027
  });
998
1028
  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.39",
3
+ "version": "2.2.41",
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",